定义函数 格式: def 函数名(参数): 函数体 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋值给一个变量,相当于给这个函数起了一个别名 def Pname(): # 当前函数不放参数
定义函数
格式:
def 函数名(参数):
函数体
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋值给一个变量,相当于给这个函数起了一个别名
def Pname(): #当前函数不放参数 print(‘大家好我是杰大哥!‘) Pname() #调用函数 执行了函数里面的代码 pri = Pname #将函数名赋值给另一个变量,相当于给当前函数取一个别名 pri() #pri()的作用等于Pname()
函数参数分类
总体上分为形参和实参
1、必备参数
向函数传递参数的方式有很多,通过实参和形参的顺序对应,这就是位置实参,参数的个数不能少,不能多,参数的位置要一一对应,只有位置一致,才能被正确匹配
2、关键字参数
关键字实参是传递给函数的名称-值对。直接在实参中将名称和值关联起来,因此向函数传递实参时不会混淆。、使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
3、默认参数
函数定义的时候,设置的参数是形参。那么也可以给每个形参指定一个默认值。当调用函数时,如果没有传入实参,就使用形参的默认值。如果调用的时候传入了实参,那么程序将使用传入的实
4、不定长参数
可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数。加了星号(*)的变量名会存放所有未命名的变量参数,按元组的类型存放,加了(**)会存放所有命名的变量参数,按字典的类型存放
def Pname(userName): #userName为形参 形参的名字是自定义的 print(‘大家好我是%s同学!‘%userName) Pname(‘刘德华‘) #传递了一个实参 ‘刘德华‘ #必备参数 def getInfo(name,address): print(‘大家好我叫%s,我来自%s‘%(name,address)) getInfo(‘刘德华‘,‘香港‘) #第一个实参对应了第一个形参,第二实参对应第二个形参 # getInfo(‘刘德华‘) #形参有两个,调用的时候,实参也要传递两个,否则会报错 #参数的个数不能少,不能多。 参数的位置要一一对应 #关键字参数 def getInfo(name,address): print(‘大家好我叫%s,我来自%s‘%(name,address)) getInfo(name=‘刘德华‘,address=‘香港‘) #给实参加上关键字 关键字对应着形参 #参数的默认值 def getInfo(name,address = ‘香港‘): #默认值参数,就是在声明函数的时候给形参赋值 print(‘大家好我叫%s,我来自%s‘%(name,address)) getInfo(‘刘德华‘) #有默认值的形参,可以不用传递 getInfo(‘刘德华‘,‘九龙‘) #传递参数时,会覆盖原来的默认值 ‘‘‘ 不定长参数 *args 是接受所有未命名的参数(关键字) **agrs2 是接受所有命名的参数(带关键字的) 输出为 大家好我叫刘德华,我来自九龙 (‘a‘, ‘b‘, ‘c‘, ‘d‘) {‘age‘: 18} ‘‘‘ def getInfo(name,address,*args,**agrs2): print(‘大家好我叫%s,我来自%s‘%(name,address)) print(args) #args 是一个元组类型 print(agrs2) #字典数据类型 getInfo(‘刘德华‘,‘九龙‘,‘a‘,‘b‘,‘c‘,‘d‘,age = 18)
可变对象与不可变对象的传递
不可变类型:整数、字符串、元组。如当调用函数fun(a)时,传递的只是a的值,没有影响a对象本身。在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身
可变类型:列表、字典。如当调用函数fun(la)时,则是将 la 真正的传过去,修改后fun外部的la也会受影响
#不可变对象的传递——值的传递 def fun(args): args = ‘hello‘ #重新赋值 print(args) #输出为hello str1 = ‘baby‘ #声明一个字符串的变量 不可变数据类型 fun(str1) #将该字符串传递到函数中 print(str1) #输出为baby 并没有被改变 #可变对象的传递——引用传递 def fun(args): args[0] = ‘hello‘ #重新赋值 print(args) #输出为[‘hello‘, ‘come on‘] list01 = [‘baby‘,‘come on‘] #声明一个列表 可变数据类型 fun(list01) #将该字符串传递到函数中 print(list01) #输出为[‘hello‘, ‘come on‘] 传递的是对象本身,函数里面被修改了值,原对象也会跟着修改