函数的参数

传递参数:定义一个函数并赋予参数,没定义参数时,只能计算指定的变量名,定义参数后,可以计算任意的值。
参数的语法---写在括号内的值
参数
没有参数
定义函数和调用函数时括号里都不写内容
 1 没定义参数
 2 s = '你好啊'
 3 def my_len():
 4     i = 0
 5     for k in s:
 6         i+=1
 7     return i
 8 
 9 ret = my_len()
10 print(ret)

  有一个参数
    传什么就是什么

 1 定义参数
 2 s1 = '你好哈'
 3 def my_len1(a):  # 自定义参数只需要0个参数,接受参数   #形式参数:形参
 4     i = 0
 5     for k in a:  # a 必须和形参是一致的
 6         i += 1
 7     return i
 8 
 9 ret1 = my_len1(s1)  # 传递参数:传参 # 实际参数:实参
10 ret2 = my_len1('你是谁啊')  # 传递参数
11 print(ret1,ret2)


     有多个参数
    位置参数

 1 典型传输多个参数:典型的位置参数
 2 def my_sum(a,b):
 3     c = a + b
 4     return c
 5 
 6 ret = my_sum(1,2)  # 位置传参
 7 ret2 = my_sum(a=2,b=1)  # 关键字传参
 8 print(ret,ret2)

站在实参的角度上:
按照位置传参
1 按位置传参
2 def func(a,b):
3     print('a =',a,'b =',b)
4     s = a+b
5     return print(s)
6 
7 func(1,2)

 

   按照关键字传参

1 按关键字传参
2 def func(a,b):
3     print('a =',a, 'b =',b)
4     s = a+b
5     return print(s)
6 
7 func(b=1,a=2)


     混着用也可以,但是必须先按照位置传参,再按照关键字传参,不能同时给一个变量传多个值

1 混着用按位置按关键字传参
2 def func(a,b):
3     print('a =',a, 'b =',b)
4     s = a+b
5     return print(s)
6 
7 func(1,b=2)
8 #错误写法 func(1,a=2),因为a不能同时接受两个参数
9 #错误写法 func(a=1,2),因为需要先按照位置传参,再按照关键字传参


站再形参的角度上:
  位置参数:必须传,且不能多传以及少传(有几个参数就传几个值)
  默认参数:可以不传,如果不写则使用默认参数,若写了就用设置的参数替换默认参数

1 def classmate(name,sex='men'):  # 默认参数 sex = 'men' # 形参:name
2      print('%s : %s'%(name,sex))
3 
4 classmate('jerry') # 实参:jerry5 classmate('Amy','woman')  # 若有参数,则修改默认参数


只有调用函数的时候
  按照位置传:直接写参数的值
  按照关键字传: 关键字 = 值 如 open( file, encoding = 'utf-8')


定义函数的时候:
  位置参数:直接定义参数
  默认参数: 关键字参数: 参数名 = ‘默认值’
  动态参数: 可以接受任意多个参数
    在定义参数的时候 前面加多个* 例子:def my_len(*aaaa)
    约定俗成 都是以 *args 为动态参数
  顺序:先定义位置参数,*args,再设置默认参数,最后**kwargs

def func(name,*args,sex='man',**kwargs):
    print('%s:%s:%s:%s'%(name,args,sex,kwargs))

func('a','v')
func('a',sex='girl')
func('a',v='a')

 

动态参数有两种

  *args: 接收的是按照位置传参的值,组成一个元组 

 1 按照位置传参
 2 def classmate(*args):  
 3     n = 0
 4     for i in args:
 5         n += i
 6     return n
 7 
 8 print(classmate(1,2))
 9 print(classmate(1,2,3))
10 print(classmate(1,2,3,4))

  **kwargs:接收的是关键字传参的值,组曾一个字典

1 按照关键字传参
2 def func(**kwargs):
3     print(kwargs)
4 
5 func(a = 1,b=2,c=3)
6 func(b=2,c=3)
7 func(c=3)

  任意传参

1 def fun(*args,**kwargs),
2     print(args,kwargs)
3 
4 func(1,2,3,a=2,b=3)

 

动态参数的另外一种传参方法

 1 动态参数的另一种传参方式
 2 def func(*args):  # 站在形参的角度上,给变量加上*,就是组合所有传来的值
 3     print(args)
 4 
 5 func(1,2,3,4,5,6)
 6 l = [2,1,3,6,5,2]
 7 func(*l)  # 站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
 8 
 9 def func(**kwargs):
10     print(kwargs)
11 
12 func(a=1,b=2)
13 d = {'a':1,'b':2}
14 func(**d)

 

 函数的注释

def func():
    '''
    这个函数实现了什么功能
    参数1:
    参数2:
    :return:
    '''
    pass

 

 

 

posted on 2019-02-11 14:54  Jerry-Wang  阅读(157)  评论(0)    收藏  举报