函数运行步骤
#密码输入程序
#调用程序在调用处暂停执行;
#调用时将实参赋到函数的形参;
#执行函数体语句;
#函数调用结束给出返回值,程序回到调用前的暂停处继续执行。
# 有默认值参数必须放在最后面!
def happy(a,b):
print(a+b)
def new(a,b=2):
print(a*b)
# * 创建函数
def fun(x,*y):
print(y)
print(min(y))
for i in y:
x+= i
return x
# *分解集合
def fun(a,b,c):
print(a+b+c)
arg=(1,2,3)
# 函数调用函数
def fun1(x):
return x*x
def fun2(x,fun):
return fun(x)
#函数调用后默认返回none
def fun(s):
c=s+1
#多个return
def fun(l):
if len(l)>2:
return l[0:2]
else:
return l
print(fun([1,23,4]))
print(fun([1,2]))
print("lisi")
#lambda 匿名函数
s=lambda x,y,z:x*y*z
s(1,2,3)
#lambda 函数练习
a=[1,2,3,4]
b=[5,6,7,8]
print(list(map(lambda x,y:x+y,a,b)))
#map函数 map(函数f(x),变量x)
m1=map(lambda x:x*x,[y for y in range(5)])
#python 生成器 yeild
()
#pyrhon 迭代器
[]
#编写一个函数,接收N个数字,求这些参数数字的和。
def func(*s):
print(s)#看看s长啥样
m=0
for i in s:
m += i
print(m)
func(1,2,3,4,5)
知识扩展
包裹传递
包裹传递也称为不定参数传递,用于在定义函数时不能确定函数调用时会传递多少个参数时使用。函数每次调用时,传递的参数数量可以不同。
- 当传入参数是位置传递时,所有传入参数被收集打包合并成一个元组,再传递给函数。
In [4]:
def add(*number):
"""接收不确定数量位置传递的参数,合并为一个元组number在函数体内使用"""
print(number) # 查看参数类型,元组
result = 0
for i in number:
result = result + i
return result
if __name__ == '__main__':
print(add(1, 3, 5, 7, 9))
print(add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
- 当传入参数是关键字传递时,所有传入的关键字参数被收集打包合并成一个字典,再传递给函数。
In [5]:
def add(**number):
"""接收不确定数量的关键字参数,合并为一个字典number在函数体内使用"""
print(number)
return sum(number.values())
if __name__ == '__main__':
print(add(a=1, b=3, c=5))
print(add(m=1, n=2, o=3, p=4, q=5, i=6, j=7, k=8))
解包裹传递
“*”“**”也可以以函数调用时使用,此时称为解包裹传递。
In [3]:
def add(a, b, c):
"""接收三个位置传递参数,返回其加和"""
return a + b + c
if __name__ == '__main__':
num1 = (1, 3, 5)
print(add(*num1))
num2 = {'a': 1, 'b': 2, 'c': 3}
print(add(**num2))
函数调用总是会给形参列表中列出的所有形参赋值,或是用位置参数,或是用关键字参数,或是用默认值。 如果存在 "identifier" 这样的形式,它会被初始化为一个元组来接收任何额外的位置参数,默认为一个空元组。 如果存在 "**identifier" 这样的形式,它会被初始化为一个新的有序映射来接收任何额外的关键字参数,默认为一个相同类型的空映射。
在 "" 或 "*identifier" 之后的形参都是仅限关键字形参因而只能通过关键字参数传入。
在 "/" 之前的形参都是仅限位置形参因而只能通过位置参数传入。
-----------------------仅个人见解,整理的学习资料,扩展资料来自赵广辉老师------------------------------