'''
#最简单的函数,无参数,无返回值
def myPrint():
print("fadsf")
print("45121")
myPrint()#调用函数
'''
#参数的使用:
#需求:编写一个函数,给函数一个字符串和一个年龄,在函数内部打印出来
#形参(形式参数):定义函数时小括号中的变量,本质是变量
#参数必须按顺序传递,个数要对应
#def myPrint(str,age,boby):#出错,上面3个参数,下面只传两个
# print(str,age)
'''
def myPrint(str,age):
print(str,age)
#实参(实际参数):调用函数时给函数传递的数据,本质是值
myPrint("tom",18)
'''
'''
#编写函数,实现功能,给函数两个数,返回这两个数的和
def mySum(num1,num2):
#将结果返回给函数的调用者
sum=num1+num2
return sum # ruturn num1+num2 两个结果相同,返回数字和
#print("***")#ruturn 结束函数,不执行后面程序
sum=mySum(1,2)
print(sum)
'''
'''
值传递:传递的不可变类型
string,tuple,number是不可变的
#
def func1(num):
num=10
temp=20
func1(temp)
print(temp)#20
'''
'''
引用传递:传递的可变类型
list,dict,set是可变的
#
def func2(list):
list[0]=100
li=[1,2,3,4,5]
func2(li)
print(li)
'''
'''
关键字参数
概念:允许函数调用时参数的顺序与定义的不一致
def myPrint(str,age):
print(str,age)
#使用关键字参数换位置
myPrint(age=18,str="tom is boy")
'''
'''
默认参数
概念:调用函数时,如果没有传递参数,则使用默认参数
def myPrint(str="tom",age=18):
print(str,age)
myPrint()#输出值 tom 18
#myPrint(age=15)#tom 15
'''
'''
不定长参数
概念:能处理比定义时更多的参数
'''
#加了(星号)*的变量存放所有未命名的变量参数,如果在函数调用时
#没有指定参数,它就是一个空元组
def func(nume,*args):#可以接受任意个参数
print(nume)
for x in args:
print(x)
func("tom","is","boy","123")
#累加
def sum(*a):
sum=0
for i in a:
sum+=i
return sum
print(sum(1,2,3,4))
#** 代表键值对的参数字典,和*所代表的意义类似
def func2(**kwargs):
print(kwargs)
print(type(kwargs))#字典类型
func2(x=1,y=2,z=3)#必须成对的,输出为dict类型
def func3(*args,**kwargs):#可以接受任意参数
pass #代表一个空语句
'''
匿名函数
概念:不适用def这样的语句定义函数,lambda来创建匿名函数
特点:
1 lambda只是一个表达式,函数体比def简单
2 lambda的主体时一个表达式,而不是代码块,仅仅只能在
lambda表达式中封装简单逻辑
3 lambda函数有自己的命名空间,且不能访问自由参数列表之外
的或全局命名空间的参数
4 虽然lambda时一个表达式且看起来只能写一行
格式:lambda 参数1,参数2……,参数n:expression
'''
sum= lambda num1,num2:num1+num2
print(sum(1,2)) #得到3
#偏函数
# 1
def int2(str,base=2):
return int(str,base)
print(int2("1010"))
2
def int2(str,base=2):
return int(str,base)
print(int2("1011"))
#两个结果相同,上一个自己写,后一个调用functools
import functools
#把一个参数固定住,形成一个新的函数
int3=functools.partial(int,base=2)
print(int3("101"))