最近在忙着实习工作的事情,一切稳定下来了,又可以接着学习python了
函数的参数
python函数的定义非常灵活,除了正常定义的参数之外,还可以使用默认的参数,可变参数和关键词参数
- 位置参数
def power(x):
return x*x
print(power(5))
x是一个位置参数,当我们在调用power函数的时候,把参数x的值要写入。
power(5)
25
当我们需要计算x^n 怎么办呢?尝试修改一下位置参数实现。
def pwer(x,n):
return x**n
pwer(4,4)得到的结果是256
前面的位置参数都是通过后面传入的,但有些时候有些参数是固定的,我们可以将它直接写上。
- 默认参数
假设在实际工作中我们经常用到x的平方计算,可以将代码这样进行设置
必选参数在前,默认参数在后,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数可以作为默认参数。
def power(x,n=2):
return x**n
做两个运算
power(5) #得到的结果为25
power(5,3) #得到的结果为125
通过上面的代码我们不难看出,当你重新传入位置参数的时候,会把固定参数进行一个更新
练习:
写个一年级小学生注册的函数,需要传入name和gender两个参数:
def enroll(name,gender):
print('name:',name)
print('gender:',gender)
enroll('xiaoming','male')
输出的结果是:
name: xiaoming
gender: male
如果要继续传入年龄,城市信息等参数,这样子会传入的参数变多,假设年龄都是6,城市是Beijing,修改代码如下:
def enroll(name,gender,age=6,city='Beijing'):
print('name:',name)
print('gender:',gender)
print('age:',age)
print('city:',city)
继续调用函数
enroll('xiaoming','male')
得到结果是
name: xiaoming
gender: male
age: 6
city: Beijing
对绝大部分同学可以按照上述参数进行,对这四个参数来说,我们给函数传入参数时会按照定义的参数先后依次给予值,比如
enroll('xiaoming','male','Tianjin')
name: xiaoming
gender: male
age: Tianjin
city: Beijing
这种情况下在写代码时候要注意将参数名也写上,比如调用enroll('Adam', 'M', city='Tianjin')
,意思是,city参数用传进去的值,其他默认参数继续使用默认值。
定义的默认参数必须指向不变对象!
def add_end(L=[]):
L.append('END')
return L
这里的L是可变对象,这样子会造成函数每次都记住了上次添加的“END“后的list。
所以一定要将默认参数指向不变对象(str,None,tuple)
def add_end(L=None):
if L==None:
L=[]
L.append('END')
return L
- 可变参数
在python函数中,还可以定义可变参数。
比如计算a2 + b2 + c2 + ……
def fun(*number):
sum=0
for i in number:
sum+=i*i
return sum
参数前面有了*,在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:
fun(1,2,3,4,5,6)
#结果是91