Python之函数与变量(一)

1,函数参数

1.1默认值参数

   在Python中,可以在声明函数的时候,预先为参数设置一个默认值,当调用函数,如果某个参数具有默认值,则可以不向函数传递该参数,这时,函数将使用声明函数时为该参数设置的默认值来运行.

1 def <函数名>(参数=默认值):
2     <函数语句>
3     return <返回值>

1.2参数传递

         在Python中参数值的传递是按照声明函数时参数的位置顺序来进行传递的,即位置参数.另一种传递参数的方法---关键字参数.
         提供关键字参数调用函数时,要在调用函数名后的圆括号里写出形式为"关键字=参数值".混合使用关键字和位置参数时,必须将位置参数写到前面.而且不能有重复的情况.
def mult_test(a, b, c):
    return a * b * c

print(mult_test(2, c=5, a=6))

--------------结果-----------------------
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    print(mult_test(2, c=5, a=6))
TypeError: mult_test() got multiple values for argument 'a'


***Repl Closed***

 1.3 不定长参数

      在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参,它将会会将所有的实参保存到一个元组中.

      注:

           ①带星号的形参只能有一个.

     ②带星号的形参可以和其他参数配合使用.

           ③可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递.若在形参开头直接写一个*,则后面所有的形参必须以关键字的形式传递.

1 #第一个参数给a,剩下的位置参数给b的元组,第三个参数必须使用关键字参数
2 def fn(a,*b,c):
3     print('a =',a)
4     print('b =',b)
5     print('c =',c)
6 fn(10,20,30,50,c = 80)

          ④.*形参只能接收位置参数,而不能接收关键字参数.

          ⑤**形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中,字典的key是参数的名字,字典的value是参数的值.**形参只能有一个,并且必须写在所有形参之后.

1 def fn3(b,c,**a) :
2     print('a =',a,type(a))
3     print('b =',b)
4     print('c =',c)
5 fn3(b=1,d=2,c=3,e=10,f=20)

#以下示例,可以传入任意数量的参数
def test(*args, **kwargs):
    print(args)
    print(kwargs)
test(1, 2, 3, 4, 5, a=10, b=12, c=45)
--------------结果-----------------------
(1, 2, 3, 4, 5)
{'a': 10, 'b': 12, 'c': 45}
 
***Repl Closed***
 1 # **形参为函数中使用大量的默认值提供了方便,不用把大量的默认值全放在函数声明中,而是把它放入到程序中
 2 def cube(name,**nature):
 3     all_nature={'x':1,
 4                 'y':1,
 5                 'z':1,
 6                 'color':'white',
 7                 'weight':1}
 8     all_nature.update(nature)
 9     print(name,'立方体的属性:')
10     print('体积:',all_nature['x']*all_nature['y']*all_nature['z'])
11     print('颜色:',all_nature['color'])
12     print('重量:',all_nature['weight'])
13 
14 
15 cube('first')   #只给出必要的参数
16 cube('second',y=3,color='red') #提供部分可选参数

     ⑥参数的解包(拆包):在传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递,这里要求序列中元素的个数必须和形参个数一致.

def fn4(a,b,c):
    print('a =',a)
    print('b =',b)
    print('c =',c)
# 创建一个字典
d = {'a':100,'b':200,'c':300}
# 通过 **来对一个字典进行解包操作
fn4(**d)

posted on 2019-10-21 21:58  rwwh  阅读(267)  评论(0)    收藏  举报

导航