Python,Day3 - Python基础3

1.函数基本语法及特性

函数是什么?

函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

语法定义

def sayhi():#函数名
    print("Hello, I‘m nobody!")
 
sayhi() #调用函数

可以带参数

#下面这段代码
a,b = 5,8
c = a**b
print(c)
 
 
#改成用函数写
def calc(x,y):
    res = x**y
    return res #返回函数执行结果
 
c = calc(a,b) #结果赋值给c变量
print(c)

2.函数参数与局部变量  

形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

3.默认参数

看下面代码

def func_test(x,y):#x,y为形参
    res = x+y    return res
z = func_test(2,4) #2,4为x,y的实参print(z)
 test(x,y,z=9(1,2,3) test(1,z=8,y=2)test(1,2) C:\Users\congcong.du\AppData\Local\Programs\Python\Python35\python.exe C:/Users/congcong.du/PycharmProjects/test/day3/1
2
3
------------
1
2
8
------------
1
2
9
------------

另外,你可能注意到了,在把country变成默认参数后,我同时把它的位置移到了最后面,为什么呢? 

4.参数组*args,传字典 **kwargs

#参数组
#若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。
#*args 接收位置参数,不接受关键字参数,转化为元组
def test1(name,*args):    
    print(name)    
    print(args)
test1("alex",1,2,3,4,5,5)
C:\Users\congcong.du\AppData\Local\Programs\Python\Python35\python.exe C:/Users/congcong.du/PycharmProjects/test/day3/func.py
alex
(1, 2, 3, 4, 5, 5)
print("=========字典=======")#传字典 **kwargs :将关键字参数,转换为字典的方式
def test2(**kwargs):    
    print(kwargs)    
    print(kwargs["name"])
test2(name="alex",age=8,sex="man")
test2(**{‘age‘: 8, ‘name‘: ‘alex‘, ‘sex‘: ‘man‘})#混和
def test3(name,age=18,**kwargs):    
    print(name)    
    print(age)    
    print(kwargs)
test3("alex", sex="man")
test3("alex",1,sex="man",hobby="tsl")
test3("alex",sex="man",hobby="tsl",age=1)
print("---------------------")
def test4(name,age=18,*args,**kwargs):    
print(name)    
print(age)    
print(args)    
print(kwargs)
test4("alex",34,1,2,3,sex="man", hobby="tsl") #关键字参数,一定要在最后一个位置参数后maintest4("alex",age=34,sex="man",hobby="tsl")

5.局部变量

局部变量只在他的作用域内其起作用,也可以声明为全局变量,不过因为写代码长的时候随便声明可能会乱,所以不推荐。

def change_name(name):    
        print("before change:",name)
    name = "里面的局部变量"
    print("after change:", name)
name=(‘外面的全局变量‘)
change_name(name)
print("在外面看看name改了么?",name)
‘‘‘
before change: 外面的变量
after change 里面的变量
在外面看看name改了么? 外面的变量
‘‘‘
print("===========全局/局部变量=======")
sex = "m"
def test5(n):    #global age #如果要在函数内改全局变量,用global声明
    sex = "g" #局部变量改不了全局的变量
    print("before change:", n,sex)
    n = "Alex Li" #这个函数就是这个变量的作用域
    age = 20    
    print("after change:", n,age,sex)
name = "alex"
test5(name)
#print(name,age,sex)   #age局部变量不能在函数外使用
print(name,sex)

函数内是可以修改全局列表的

print("======函数修改列表====")
names = ["alex","jack","rain"]def change_list():
    names[0]= "ALEX"
    print(names)
change_list()print(names)

6.递归函数

#函数内部调用自己。
#1.必须有一个明确的结束条件,最大递归次数999.
#2.每次进入更深一层递归时,问题规模相比上次递归应有减少
#3.效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
print("========递归函数=========")#函数内部调用自己。1.必须有一个明确的结束条件,最大递归次数999.#2.每次进入更深一层递归时,问题规模相比上次递归应有减少#3.效率不高def test6(n):    print(n)    if int(n/2) > 0:        return test6(int(n/2))    print("-->",n)

test6(10)

7.高阶函数

print("========高阶函数=========")#变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
#abs 转化为正数的函数
def add(x,y,f):
    return f(x)+f(y)

res = add(3,-6,abs)
print(res)

8.字符编码与转码

Python3中默认的字符编码为Unicode,可以直接encode为其他编码

python2中默认为windows下的gbk,所有得非Unicode都要先decode为Unicode,然后再encode为其他的字符编码。

借图

import sys
print(sys.getdefaultencoding()) #显示字符编码
a_unicode="夫风起于青萍之末" #这个是unicode格式
print(a_unicode)
a_gbk=a_unicode.encode(‘gbk‘)   #默认是unicode格式,转化为gbk格式
print(a_gbk)
a_gb2312=a_gbk.decode(‘gbk‘).encode(‘gb2312‘)   #先decode转化为unicode格式,括号里告诉自己是gbk格式的,再encode转化,括号里写要转化的格式。
print(a_gb2312) #gbk是gb2312升级版,常用汉字的编码基本相同
a_unicode2=a_gbk.decode(‘gbk‘)    #转化为unicode格式
print(a_unicode2)

9.day3 文件操作 seek tell 修改

打开文件的模式:

  • r, 只读模式【默认】
  • w,只写模式【不可读;不存在则创建;存在则删除内容;】
  • a, 追加模式【不可读;不存在则创建;存在则只追加内容;】

"+" 同时读写某个文件:

  • r+,可读写文件。【可读;可追加】
  • w+,写读
  • a+,追加读

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

1.read()、readline()、readlines()的区别

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC#
##默认读取模式
file = open("test_file","r",encoding="utf-8") #文件句柄print(file.read())
data = file.read() #所有内容
data1 = file.read() #第二次读,是读不出数据的
file.seek(0)  #将光标归零
data2 = file.read() #光标归零后就可以再出读出数据
file.close()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC
file = open("test_file","r",encoding="utf-8") #文件句柄
print(file.read()) #读出全部
file.seek(0)
print(file.readline()) #读出一行
file.seek(0)
print(file.readlines()) #把文章内容以换行符分割,并生成list格式

C:\Users\congcong.du\AppData\Local\Programs\Python\Python35\python.exe C:/Users/congcong.du/PycharmProjects/test/day3/file.py
1如果你真的爱我 让我走开
2心疼你当初反覆那样的说
3如果你真的爱我 让我走开
4我决心不从旧梦中 挣脱
5如果你真的爱我 让我走开
6心疼你为我藏住分离的苦
7如果我知道你是这样的难过
8会一个人走向寂寞
1如果你真的爱我 让我走开

[‘1如果你真的爱我 让我走开\n‘, ‘2心疼你当初反覆那样的说\n‘, ‘3如果你真的爱我 让我走开\n‘, ‘4我决心不从旧梦中 挣脱\n‘, ‘5如果你真的爱我 让我走开\n‘, ‘6心疼你为我藏住分离的苦\n‘, ‘7如果我知道你是这样的难过\n‘, ‘8会一个人走向寂寞‘]
file = open("test_file","r",encoding="utf-8") #文件句柄
for i in range(5):
    print(file.readline()) #读出前五行
    file.close()
for line in file.readlines(): #转化为列表格式了
    print(line.strip())
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC
file = open("test_file","r",encoding="utf-8") #文件句柄#将文件全部读入内存
for index,line in enumerate(file.readlines()): #读列表和下标
    if index == 9:
        print("-----------------")
        continue
  print(line.strip())
    ‘‘‘
    #这个效率最高,for line in file,逐行读到内存
‘‘‘
count = 0
for line in file:
    if count == 9:
        print("--------------------")
    count += 1
    continue
  print(line)
    count += 1
‘‘‘
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC
##默认读取模式
file = open("test_file","r",encoding="utf-8") #文件句柄
print(file.tell()) #打印光标当前的位置
print(file.readline())
print(file.readline())
print(file.readline())
print(file.tell())
file.seek(0)  #移动归零
print(file.tell())
file.flush #刷新,从内存写到磁盘
file.close()

C:\Users\congcong.du\AppData\Local\Programs\Python\Python35\python.exe C:/Users/congcong.du/PycharmProjects/test/day3/file.py
0
1如果你真的爱我 让我走开

2心疼你当初反覆那样的说

3如果你真的爱我 让我走开
110
0
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:DCC
#修改思路:打开一个文件,从旧文件,读一行写一行,改一行,写一行
f = open("test_file","r",encoding="utf-8")
f_new = open("test_file.bak","w",encoding="utf-8")
for line in f:    
    if "心疼" in line:
      line = line.replace("心疼","xinteng")     
      print(line)
    f_new.write(line)
f.close()
f_new.close()
#with
#python 一行不要超过80个字符,用换行with open("yesterday","r",encoding="utf-8") as f,open("yesterday2","r",encoding="utf-8") as f2:  
    for line in f:        
        print(line)    
    for line2 in f2:        
        print(line2)
时间: 2024-10-05 05:42:25

Python,Day3 - Python基础3的相关文章

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

给深度学习入门者的Python快速教程 - 基础篇

实在搞不定博客园的排版,排版更佳的版本在: https://zhuanlan.zhihu.com/p/24162430 Life is short, you need Python 人生苦短,我用Python -- Bruce Eckel 5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明确.Python作者是荷兰人Guido van Rossum,1

Python第一周基础篇

<感言:首先感谢alex老师精彩课程,第一周的第一天,随着金角大王的豪言壮语般的心灵鸡汤完美收场.此刻坐在电脑前的我仍是热血澎湃,下定决心好好跟着大王一起学好python> ----祝老师教师节快乐                                      Python第一周基础篇 博文结构: --1--python2.*与python3.*主要区别 --2--python安装与配置 --3--PyCharm开发工具的安装与配置 --4--变量的定义 --5--注释的使用 --

初识Python(1)__Python基础

Python基础 一.  注释(#) Python注释语句是用“#”字符开始,注释可以在一行的任何地方开始,解释器会忽略掉该行 # 之后的所有内容. 单行注释:   1 print ‘hello, world!’ #打印 hello,world 多行注释:多行注释用三引号’’’将需要注释的部分括起来,例如: 1 ’’’ 2 Hello ,world. 3 I’m Jay, and l like python. 4 ’’’ 3. 中文注释:需要在文件头写上: #coding=gbk 或者 #cod

玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1 一.集合 1.set 无序,不重复序列 {}创建,直接写元素 2.set功能 __init__()构造方法,,使用强制转换就会调用此方法 1 set1 = {'year', 'jiujiujiu'} 2 print(type(set1)) 3 # 创建集合 4 s = set() # 创建空集合 5 li = [11, 22, 11, 22] 6 s = set(li) set 3.集合的基本操作 1 # 操作集合 2 s1 = set() 3 s1.a

Python&lt;3&gt;字符串基础

字符串是单个字符的字符串序列,有序字符的集合. Python允许字符串包括在双引号或单引号中(代表相同的东西). 序列操作 <1>索引 正向索引,反向索引 <2>分片 包括左边,不包括右边 左边默认为0,右边默认为len(str) 可以设置读取的间隔 <3>合并+.重复* 不可变性 创建后就不能被改变,不能对某一位置赋值 常用表达式 <1>str='' :空字符串 <2>str1.find(str2):返回子字符串的偏移量 <3>st

python 解析html基础 HTMLParser库,方法,及代码实例

HTMLParser, a simple lib as html/xhtml parser 官方解释: This module defines a class HTMLParser which serves as the basis for parsing text files formatted in HTML (HyperText Mark-up Language) and XHTML.Unlike the parser in htmllib, this parser is not base

Python day1 ---python基础1

本节内容 Python介绍 编程语言分类 Hello World程序 变量 字符编码 用户输入 数据类型初识 表达式if ...else语句 表达式while 循环 表达式for 循环 break and continue 嵌套 作业需求 一.python介绍 python的创始人---吉多·范罗苏姆(Guido van Rossum)----1989年 目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发: 众多优秀的WEB框架,众多大型网站均为

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python