第一天的话,我们学习了python的一些基础语法,例如基础数据类型,元组,列表以及一些简单的if else语法,再加上一些简单文件读取写入等操作,第二天我们学习python中函数的一些操作。
函数:
函数是组织好的,可重复使⽤的,⽤来实现单⼀,或相关联功能的代码段。
函数的定义以及调用
def 函数名(形参):
函数体
例:
def my_len():
s = 'hello world'
length = 0
for i in s:
length = length + 1
print(length)
my_len()
定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
def 是固定的,不能变,他就是定义函数的关键字。
空格 为了将 def 关键字和函数名分开,必须空(四声),当然你可以空 2 格、3 格或者你想空多少都行,但正常人还是空 1 格。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便
起,但我们给函数起名字还是要尽量简短,并能表达函数功能
括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代
码的可读性。
调用:就是 函数名() 要记得加上括号。
函数的返回值
return关键字的作用:
- return 是⼀个关键字,这个词翻译过来就是“返回”,所以我们管写在 return 后⾯的值叫“返回值”。
- 不写return的情况下,默认返回一个None。
- 一但遇到return,函数结束。
- 返回的多个值会被组织成元组被返回,也可以⽤多个值来接收。
函数的参数
1.一般传参
def maxnumber(x,y):
the_max=x if x>y else y
return the_max
ret=maxnumber(10,20)# 按位置传参
print(ret)
ret=maxnumber(y=10,x=20)#按关键字传参
ret=maxnumber(10,y=20)#混合传参 位置参数必须在关键字参数的前⾯
# 对于⼀个形参只能赋值⼀次
2.默认传参
def stu_info(name,age = 18):
print(name,age)
stu_info('aaron')
stu_info('song',50)
3.动态参数
def demo(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
demo('aaron',1,3,[1,3,2,2],{'a':123,'b':321},country='china',b=1)
'''
动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你
就用*args,**kwargs 接收,args 是元祖形式,接收除去键值对以外的所有参数,kwargs 接收的只是键值对的参数,并保存在字典中。
'''
函数名的本质
函数名本质上就是函数的内存地址 。
1.可以被引用
def func():
print('in func')
f=func
print(f)
f()
2.可以被当作容器类型的元素
def f1():
print('f1')
def f2():
print('f2')
def f3():
print('f3')
l = [f1,f2,f3]
d = {'f1':f1,'f2':f2,'f3':f3}
l[0]()
d['f2']()
3.可以当做函数的参数以及返回值
def f1():
print('f1')
def func(argv):
argv()
return argv
f = func(f1)
f()
闭包:
内部函数包含对外部作⽤域⽽⾮全局作⽤域变量的引⽤,该内部函数称为闭包函数。
#闭包的实例:
def func():
name = 'aaron'
def inner():
print(name)
return inner
f = func()
f()
#判断闭包函数的⽅法 closure
def func():
name = 'aaron'
def inner():
print(name)
print(inner.__closure__)
return inner
f = func()
f()
# 最后运行的结果里面有 cell 就是闭包
name = 'aaron'
def func():
def inner():
print(name)
print(inner.__closure__)
return inner
f = func()
f()
# 输出结果为 None,说明不是闭包
def wrapper():
money = 1000
def func():
name = 'apple'
def inner():
print(name,money)
return inner
return func
f = wrapper()
i = f()
i()
def func(a,b):
def inner(x):
return a*x + b
return inner
func1 = func(4,5)
func2 = func(7,8)
print(func1(5),func2(6))