python中的函数(2)

5.函数的参数

函数的参数:位置参数、默认值参数、命名参数、可变参数、万能参数

#计算圆的周长
def get_circle(r,pi):
	return 2*r*pi
if _name_ == "_main_":
	r = float(input("请输入半径:"))
	cal = get_circle(r,3.14)
	print("圆的周长:",cal)
5.1位置参数
def power(x,n):   
	s = 1
	while n > 0:
		n = n - 1
		s = s * x
	return s
print(power(4,3))

对于power(x,n)来说有两个参数,调用函数的时候需要一次按照顺序传入两个参数的值

5.2默认值参数
def power(x,n=2):
	s = 1
	while n > 0:
		n = n - 1
		s = s * x
	return s
print(power(4))

默认值参数就是给一个参数设定默认值,如果这个参数没有传入对应的值,按照默认值进行计算,如果传入对应的值,安宅传入的值进行计算

注意:默认参数值写在后面(为什么)

>>> def add_end(L=[]):
...     L.append("END")
...     return L
...
>>>
>>> add_end()
['END']
>>>
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']
>>> add_end()
['END', 'END', 'END', 'END']
>>> add_end()
['END', 'END', 'END', 'END', 'END']
>>> add_end()
['END', 'END', 'END', 'END', 'END', 'END']

参数L本身就是一个变量,[] ------ 指向的List对象,默认值非必要不要只想可变对象(默认值必须指向是不可变对象)

None

>>> def add_end(L = None):
...     if L is None:
...             L = []
...     L.append("END")
...     return L
...
>>> add_end()
['END']
>>> add_end()
['END']
>>> add_end()
['END']
>>> add_end()
['END']
5.3可变参数

可变参数,*表示可变参数

允许调用函数的时候传入0个或者任意个参数,系统会将这些参数自动封装成元组

def num(*numbers):
	sum = 0
	for n in numbers:
		sum = sum + n * n
	return sum
# print(num([1,2,3,4]))
# print(num((1,2,3,4)))
print(num(1,2,3,4))
print(num(1,2,3))

补充


list = [1,2,3,4]
print(num(list[0],list[1],list[2],list[3]))
print(*list)
print(num(*list))
5.4关键字参数

允许调用函数的时候传入0个或者任意个函数,系统会将这些参数自动封装成字典

>>> def person(name,age,**kw):
...     print("name:",name,"age:",age,"other:",kw)
...
>>> person("zhangsan",18)
name: zhangsan age: 18 other: {}
>>> person("zhangsan",18,city="beijing")
name: zhangsan age: 18 other: {'city': 'beijing'}
>>> person("zhangsan",18,city="beijing",gender="男")
name: zhangsan age: 18 other: {'city': 'beijing', 'gender': '男'}
>>>
>>> d = {"city":"chongqing","gender":"男"}
>>> person("lisi",20,city=d["city"],gender=d["gender"])
name: lisi age: 20 other: {'city': 'chongqing', 'gender': '男'}
>>> person("list",20,**d)
name: list age: 20 other: {'city': 'chongqing', 'gender': '男'}
5.5命名关键字参数
>>> def person(name,age,*,city,gender):
...     print(name,age,city,gender)
...
>>> person("zhangsan",24,city="beijing",gender="男")
zhangsan 24 beijing 男
>>> person("zhangsan",24,"beijing","男")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: person() takes 2 positional arguments but 4 were given

person(“zhangsan”,24,“beijing”,“男”)报错的原因是没有出现命名的关键字,系统默认的是位置参数person(name,age,*,city,gender):函数位置参数只有两个,所以会报错

补充:
1.如果函数参数中已经出现可变参数,可以省略命名关键字的*

>>> def person(name,age,*args,city,gender):
...     print(name,age,city,gender)
...
>>> person("zhangsan",24,city="beijing",gender="男")
zhangsan 24 beijing 男

2.也可以给命名关键字参数设置默认值

>>> def person(name,age,*,city="beijing",gender):
...     print(name,age,city,gender)
...
>>> person("zhangsan",24,gender="男")
zhangsan 24 beijing 男
>>> person("zhangsan",24,city="shanxi",gender="男")
zhangsan 24 shanxi 男
5.6 参数组合

五种参数类型可以组合使用,但是有一定的顺序,顺序是:位置参数、默认值参数、可变参数、命名关键字参数、关键字参数

>>> def f1(a,b,c=0,*args,**kw):
...     print("a=",a,"b=",b,"c=",c,"args=",args,"kw=",kw)
...
>>> def f2(a,b,c=0,*,d,**kw):
...     print("a=",a,"b=",b,"c=",c,"d=",d,"kw=",kw)
...
>>> f1(1,2)
a= 1 b= 2 c= 0 args= () kw= {}
>>>
>>> f1(1,2,c=3)
a= 1 b= 2 c= 3 args= () kw= {}
>>> f1(1,2,c=3,"a","b")
  File "<stdin>", line 1
    f1(1,2,c=3,"a","b")
                      ^
SyntaxError: positional argument follows keyword argument
>>> f1(1,2,3,"a","b")
a= 1 b= 2 c= 3 args= ('a', 'b') kw= {}
>>> f1(1,2,3,"a","b",x=99)
a= 1 b= 2 c= 3 args= ('a', 'b') kw= {'x': 99}
>>> f2(1,2,d=99,k=None)
a= 1 b= 2 c= 0 d= 99 kw= {'k': None}
>>> f2(1,2,f=99,k=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f2() missing 1 required keyword-only argument: 'd'
>>> def f1(a,b,c=0,*args,**kw):
...     print("a=",a,"b=",b,"c=",c,"args=",args,"kw=",kw)
...
>>> def f2(a,b,c=0,*,d,**kw):
...     print("a=",a,"b=",b,"c=",c,"d=",d,"kw=",kw)
...
>>> args=(1,2,3,4)
>>> kw = {"d":99,"X":"#"}
>>> f2(*arg,**kw)
a= 1 b= 2 c= 3 args= (4,) kw= {'d': 99, 'X': '#'}
>>> arg=(1,2,3)
>>> kw = {"d":99,"X":"#"}
>>> f2(*arg,**kw)
a= 1 b= 2 c= 3 d= 99 kw= {'X': '#'}
>>> kw = {"f":88,"x":"&"}
>>> f2(*arg,**kw)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f2() missing 1 required keyword-only argument: 'd'

注:任何函数都可以有以上五种参数组合,同时尽量不要使用太多参数类型的组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值