函数关键字
关键字参数用**kwargs表示
- 参数非必填
- 没有限制参数个数
- 所传参数必须是字典格式
函数的定义
函数相当于编程过程中剪切粘贴的操作,可以降低代码冗余,将复杂的系统分解为可管理的部分。
最大化代码重用和最小化代码冗余;实现流程的分解。
- def是一个可执行语句,即在python运行到def语句之前函数并不存在。因此def语句的作用是创建一个函数对象并将其赋值给一个变量名
- lambda创建一个对象并将其作为结果返回。
- reture从函数被调用开始到函数完成它额工作,函数通过return语句将函数调用结果传递给调用者。
- yield语句可以挂起函数的状态以便在稍后恢复原来的状态,可以给调用者发回一个结果对象并让它记住离开的地方。
- 在默认情况下在函数中被赋值的对象是这个函数的本地变量,且仅在函数运行的过程中存在。global则是声明了一个模块级的变量并赋值。
- nonlocal语句允许函数来赋值一条语法封闭的def语句的作用域中已有的名称,即声明了将要赋值的一个封闭的函数变量。
函数参数与作用域
-
参数
参数是通过赋值来传递的。参数的传递是通过自动将对象赋值给本地变量名来实现的;函数内部参数名的赋值不会影响调用;改变函数可变对象参数的值会对调用有影响。
关键字参数:在调用函数时允许通过变量名匹配而不是通过位置;位置参数:通过位置进行参数值的传递;默认参数:如果没有传入值,在函数运行前参数就被赋了默认值。
-
作用域
在任何情况下,变量的作用域总是由代码中被赋值的地方所决定与函数的调用完全没有关系,因此又被称为语义作用域。通常情况下变量可以在三个不同的地方分配,分别对应三种不同的作用域:1.如果一个变量在def内赋值它的作用域在这个函数内;2.如果一个变量在一个嵌套的def中被赋值,对于嵌套的函数来说是非本地的;3.如果在def之外赋值,它的作用域是文件全局的。
函数定义的是本地作用域,而模块定义的是全局作用域。两个作用域之间的关系:内嵌模块是全局作用域;全局作用域的范围仅限于单个文件;每次对函数的调用都相当于创建了一个本地作用域;赋值的变量名除非声明为全局变量或者非本地变量,否则均为本地变量;所有其他的变量名都可以归纳为本地(在def内部),全局变量(模块命名空间内部),内置变量(由python预定义的内置模块提供)。 -
LEGB原则(变量名解析机制)
LEGB:其中L:本地作用域;E:上一层结构中的lambda或def的本地作用域;G:全局作用域;B:内置作用域。
函数返回值
在python中的函数都有返回值,默认为None。也可以使用return value语句来定义一个且只能定义一个或多个任意类型的返回值。
函数中print()和return()的区别:
return()返回值并结束函数,print()仅仅是打印输出,函数没有返回值,为none。
def sum1(x,y):
print(x+y)
def sum2(x,y):
return x+y
x=int(input('请输入一个值:'))
y=int(input("请再输入一个值:"))
result1=sum1(x,y)
result2=sum2(x,y)
print(result1)
print(result2)
File
文件是计算机中由操作系统管理的具有名字的存储区域。文件对象是常见文件处理任务输出模块。
打开文件方式(读写)
打开文件程序会调用内置的open函数,格式为:open(“文件名”,打开方式)。处理模式:“r”:为输入打开文件;“w”:为输出生成并打开文件;“a”:在文件尾部追加内容而打开文件。
文件对象的操作方法
操作 | 方法 |
---|---|
output=open(‘C:\spam’,‘w’) | 创建输出文件('w’是写入 |
input=open(‘data’,‘r’) | 创建输入文件('r’是读写) |
input=open(‘data’) | 与上一行相同,‘r’是默认值 |
astring=input.read() | 把整个文件读进单一字符串 |
astring=input.read(N) | 读取之后的N个字节(一个或多个)到一个字符串 |
astring=innput.readline() | 读取下一行(包括行末标识符)到一个字符串 |
alist=input.readlines() | 读取整个文件到字符串列表 |
output=write(astring) | 写入字节字符串到文件 |
output=wrutelines(alist) | 把列表内所有字符串写入文件 |
output.close() | 手动关闭(当文件收集完成时会替你关闭文件) |
output.flush() | 把输出缓冲区刷到硬盘中,但不关闭文件 |
anyFlie.seek(N) | 修改文件位置到偏移量N处以便进行下一步操作 |
for linne in open(‘data’):use line | 文件迭代器一行一行的读取 |
open(‘f.txt’,encoding=‘latin-1’) | python3.0unicode文本文件(str字符) |
open(‘f.bin’,‘rb’) | python3.0二进制byte文件(bytes字符串) |
操作 | 方法 |
---|---|
os.mknod(“text.txt”) | 创建空文件 |
open(“text.txt”,“w”) | 直接打开一个文件如果不存在就创建一个文件 |
os.mkdir(“file”) | 创建目录 |
shutil.copyfile(“oldfile”,“newfile”) | 复制文件,oldfile和newfile都只能是文件 |
shutil.copy(“oldfile”,“newfile”) | 复制文件,oldfile只能是文件夹,newfile可以是文件也可以是目标目录 |
shutil.copytree(“olddir”,“newdir”) | 复制文件夹,olddir和newdir都只能是目录,且newdir必须不能存在 |
os.rename(“oldname”,“newname”) | 重命名文件或目录 |
shutil.move(“oldpos”,“newpos”) | 移动文件目录 |
os.remove(“file”) | 删除文件 |
os.rmdir(“dir”) | 只能删除空目录 |
shutil.rmtree(“dir”) | 空目录,有内容的目录都可删除 |
os.chdir(“path”) | 转换目录路径 |
os.path.exists(“goal”) | 判断目标是否存在 |
os.path.isdir(“goal”) | 判断目标是否目录 |
os.path.isfile(“goal”) | 判断目标是否文件 |
学习对Excel及CSV文件进行操作
- excel文件
使用xlrd读取文件,使用xlwt生成Excel文件(可以控制Excel中单元格的格式)。但是用xlrd读取excel是不能对其进行操作的;而xlwt生成excel文件是不能在已有的excel文件基础上进行修改的,如需要修改文件就要使用xluntils模块。pyExcelerator模块与xlwt类似,也可以用来生成excel文件。 - CSV文件
csv是逗号分隔值文件格式,一般用WORDPAD或记事本(NOTE),EXCEL打开。csv(逗号分隔值)是一种用来存储数据的纯文本文件,通常都是用于存放电子表格或数据的一种文件格式。
打开并写入csv文件:利用open函数打开csv文件并写入一行数据(例:c=open(‘url.csv’,‘w’),write=csv.writer©)。
读取csv文件:c=open(‘url.csv’,‘rb’),read=csv.reader©
Os模块
Python os模块包含普遍的操作系统功能。
操作 | 解释 |
---|---|
os.name | 输出字符串指示正在使用的平台 |
os.getcwd() | 函数得到当前工作目录,即当前Python脚本工作的目录路径 |
os.listdir() | 返回指定目录下的所有文件和目录名 |
os.remove() | 删除一个文件 |
os.system() | 运行shell命令 |
os.sep | 取代操作系统特定的路径分割符 |
os.linesep | 字符串给出当前平台使用的行终止符 |
os.path.split() | 函数返回一个路径的目录名和文件名 |
os.path.isfile() | 检验给出的路径是一个文件 |
os.path.isdir() | 检验给出的路径是一个目录 |
os.path.exists() | 检验给出的路径是否真地存在 |
os.path.abspath(name) | 获得绝对路径 |
os.path.getsize(name) | 获得文件大小,如果name是目录返回0L |
os.path.join(path,name) | 连接目录与文件名或目录 |
os.path.basename(path) | 返回文件名 |
os.path.dirname(path) | 返回文件路径 |
Datetime模块
- 类
类名 | 功能说明 |
---|---|
date | 日期对象,常用的属性有year, month, day |
time | 时间对象 |
datetime | 日期时间对象,常用的属性有hour, minute, second, microsecond |
datetime_CAPI | 日期时间对象C语言接口 |
timedelta | 时间间隔,即两个时间点之间的长度 |
tzinfo | 时区信息对象 |
- data方法
操作 | 解释 |
---|---|
x.sub(y) | x - y |
x.rsub(y) | y - x |
isocalendar(…) | 返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7) |
isoformat(…) | 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串 |
isoweekday(…) | 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7) |
weekday(…) | 返回的周一为 0, 周日为 6 |
- 其他方法与属性
操作 | 解释 |
---|---|
timetuple(…) | 返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0 |
toordinal(…) | 返回公元公历开始到现在的天数 |
replace(…) | 返回一个替换指定日期字段的新date对象 |
resolution | date对象表示日期的最小单位 |
fromordinal(…) | 将Gregorian日历时间转换为date对象 |
fromtimestamp(…) | 根据给定的时间,返回一个date对象 |
today(…) | 返回当前日期 |
max | date类能表示的最大的年、月、日的数值 |
min | date类能表示的最小的年、月、日的数值 |