Python全栈之路Day18
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈之路Day18相关的知识,希望对你有一定的参考价值。
初次编辑2017年10月23日,星期一
摘要
引用:Alex
- 定义函数
- 调用函数
- 函数返回值
- 函数的参数
一. 上节课复习
- write补充
- f.write(‘111\\n‘)
f.write(‘111\\n‘) - f.writelines([‘111\\n‘,‘222\\n‘]) #writelines 用法相当于write多行
- writelines() 方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \\n
- writelines() 方法用于向文件中写入一序列的字符串。
- f.write(‘111\\n‘)
- truncate
- truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小
二. 定义函数
- 函数的定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
- 特性:
减少重复代码
使程序变的可扩展
使程序变得易维护 - 注:函数的定义相当于变量的赋值,函数名相当于变量名,函数的代码相当于变量值;且定义阶段只检测函数的语法是否正确,但调用阶段则不同
- 特性:
- 函数分类
- 内置函数
- 自定义函数
- def 函数名(arg1,arg2,arg3):
‘描述信息‘
函数体
return 1
- def 函数名(arg1,arg2,arg3):
- 函数的定义和调用
- 定义无参函数:调用时为函数调用的语句形式
foo()
- 定义有参函数:定义时有参,调用时必须传参,且一般有返回值;调用时为函数调用的表达式形式
res=bar(1,2)
- 定义空函数
- 定义无参函数:调用时为函数调用的语句形式
- 函数的返回值
- 未在函数中指定return,那这个函数的返回值为None
- 如果return返回值为多个,会以元组的形式返回
- 总结:
- 可以返回任意类型
- return 1 ----> 1
- return 1,2,3 -----> (1,2,3)
- 没有return -----> None
- 函数执行到return就会结束掉
- 变量的解压
- ‘_‘、‘*_‘
- 函数的参数
- 形参:在函数定义阶段,括号内定义的参数,本质就是变量名
- 实参:在函数调用阶段,括号内定义的参数,必须要有一个明确的值,可被当成变量值
- 注意:实参的值要为不可变类型
- 在函数中不要去修改全局的变量
def foo(x,y) #形参
print(x)
print(y)
foo(1,2) #实参
在实参的角度的三种传值方式
按位置传值:
def foo(x,y):
print(x)
print(y)
foo(1,2)
按照关键字传值
def foo(x,y):
print(x)
print(y)
foo(x=1,y=2)
- 混用
- 按位置传值必须在按关键字传值的前面
对于一个形参,只能赋值一次,不能重复赋值
def foo(x,y):
print(x)
print(y)
foo(1,y=2)
从形参的角度分析
位置参数,必须传值的参数
def foo(x,y):
print(x)
print(y)
foo(1,2)
- 默认参数
- 默认参数必须放到位置参数的后面
- 默认参数
def foo(x,y=1):
print(x)
print(y)
foo(2)
默认参数在函数定义阶段,他的值就已经确定了
sex =‘male‘
def register(sex=x): #register-----[sex = ‘male‘]
print(sex)
sex = None
register() #输出为male
- 在函数中不要去修改全局的变量(不推荐下述方式)
x=[]
def register(name,name_list=x):
name_list.append(name)
register(‘ASB‘)
register(‘YSB‘)
register(‘WSB‘)
print(x) #[‘ASB‘,‘YSB‘,‘WSB‘]
三. 可变参数
- *args
def foo(x,*args): #args = (2,3,4,5,6,‘a‘,‘b‘)
print(x)
print(args)
foo(1,2,3,4,5,6,‘a‘,‘b‘) #输出为1;(2,3,4,5,6,‘a‘,‘b‘)
- args 与位置参数和默认参数混用:*args要放到位置参数的后面
def foo(x,*args,y=2)
print(x)
print(args)
print(y)
foo(1,2,3,4,5,y=1000) #>>1;(2,3,4,5);1000
- 从形参的角度
def foo(*args): #args=(1,2,3)
print(args)
foo(1,2,3)
- 从实参的角度
def bar (x,y,z)
print(x)
print(y)
print(z)
bar(*(1,2,3)) #bar(1,2,3)
- **kwargs
def foo(x,**kwargs):
print(x)
print(kwargs)
foo(1,y=2,a=3,b=4) #<<1;{‘b‘:4,‘y‘:2,‘a‘:3}
- 注意:**kwargs (按关键字传值),按位置传之后剩下的会给**,处理结果为{}字典的形式
* args (按位置传值),按关键字传值剩下的会给*,处理结果为()元组的形式- 混用
def foo(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
foo(1,y=1,z=2) #>>1,(),{‘y‘:1,‘z‘:2}
- 从形参的角度
def foo(**kwargs): #{‘x‘: 1, ‘y‘: 2, ‘z‘: 3}
print(kwargs)
foo(x=1,y=2,z=3)
3.从实参的角度
def foo(x,y,z=3):
print(x)
print(y)
print(z)
foo(**{‘x‘:1,‘y‘:2,‘z‘:3}) #foo(x=1,y=2,z=3)
- 嵌套
def auth(name,password,sex=‘male‘):
print(name)
print(password)
print(sex)
def foo(*args,**kwargs): #args =(‘egon‘,‘123‘) kwargs= {}
print(‘from foo‘)
auth(*args,**kwargs) #auth(*(‘egon‘,‘123‘),**{})---------auth(‘egon‘,‘123‘)
foo(‘egon‘,‘123‘) >>
作业
- 无
今日总结
- 待补充
以上是关于Python全栈之路Day18的主要内容,如果未能解决你的问题,请参考以下文章