python学习记录10---------------函数
函数:
def 函数名(变量名1,变量2.。。):
函数体
-----------------------------------------------函数名---------------------------------
函数名相当于一个变量,保存的是函数对象在内存中的地址
def func(a,b):#函数名:func
return a+b #函数体
#1、函数名赋值,此时add函数相当于func函数
# add = func
# print(add(1,2)) #打印3
#2、函数名可以当做形参
# def add(a,b,f):
# return f(a,b*2)+f(a*2,b)
# print(add(1,2,func))#相当于func(1,2*2)+func(1*2,2)=9
def func(a,b):#函数名:func
return a+b #函数体
#3、当做函数的返回值
def add():
return func
print(add()(1,2))#相当于func(1,2)=3
----------------------------------------------------------------------------------------------------
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Runoob"
[1,2,3]是列表类型,
"Runoob"是字符串string类型。a是变量,没有类型,它只是一个对象的引用,可以指向list类型,也可以指向string类型
---------------------------------------------函数的注意点--------------------------
a=1 #a指向1
a=2#当a再次赋值2时,a指向2所在的内存。
-------------------------------------------------------------------------------------------------------
python中,函数的参数传递性:
1、不可变类型:整型、字符串、元组;当这类参数作为函数的参数传值时,是将变量的指向传递给参数,不会影响变量本身,如下例,当b=1传给fuzhi(b)时,并不会改变b的值
def fuzhi(a):
a=2
b=1
fuzhi(b);print(b)#还是打印1
2、可变类型:类似 c++ 的引用传递,如 列表,字典。如myappend(l),则是将 l指向的值真正的传过去,修改后myappend外部的l也会受影响
def myappend(List):
List.append([3,4])
print("函数内改变List值:",List)
l = [1,2]
myappend(l) #函数内改变List值: [1, 2, [3, 4]]
print("函数外改变l值:",l) #函数外改变l值: [1, 2, [3, 4]]
--------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------参数----------------------------------------------------------------------
参数分类:
1、必须参数(参数数量要一致)
必须按照定义时正确是参数顺序传入函数,参数数量必须相同
2、关键字参数(调用函数时,参数使用函数命名时的参数,此时参数顺序可变)
1 def info(name,sex,age): 2 print("name:",name) 3 print("sex:",sex) 4 print("age:",age) 5 info(age=11,name="fangxs",sex="man")#调用函数时,参数使用命名时的参数名,顺序可变
3、默认参数()
定义函数时,参数可以有默认值,但是必须在函数参数的最后。
1 def info(name,sex,age=18):#age必须要放置在没有默认值参数之后(name,sex) 2 print("name:",name) 3 print("sex:",sex) 4 print("age:",age) 5 info(name="fangxs",sex="man")#age有默认值,调用函数时可以不给age传值,打印时,age=18
4、不定长参数(带*为元组存放参数,带**为字典)
def tuple(str,*num): print("random:",str) print(num) tuple("begin",1,2,3,4,5,6) #打印begin (1,2,3,4,5,6)
1 def tuple(str,**num):#字典来存储 2 print("random:",str) 3 print(list(num.values())) 4 tuple("begin",name="fangx",age=18,sex="super man")#采用key=value在输入
定义函数时,若参数单独出现【 * 】意味着 * 之后的参数必须用关键字传值
def add(a,b,*,c): print(a+b+c) add(1,2,c=3)#*之后的参数c 必须用关键字传值
--------------------------------------------------匿名函数 lambda--------------------
所谓匿名,无需使用 def 语句定义函数,而用:
定义:函数名 = lambda 参数:参数表达式
1 info = lambda name,age:print(name,age) 2 info("fangxs",18)
-------------------------------------------------返回值 return---------------------------------------------
1、如果函数体没有return,默认返回None
2、可以返回多个对象,python会将所有的对象组成一个元组对象返回