函数的初识

#函数定义
def mylen():      #def 关键字,定义函数, 空格 函数名(变量)
    """计算s1的长度"""
    s1 = "hello world"
    length = 0
    for i in s1:
        length = length+1
    print(length)
#函数调用  
mylen()

函数是以功能为导向,函数内部尽量不要有print

return:

1.结束

def my_len():
    print(1111)
    print(222)
    return
    print(333)
my_len()
#输出:      1111
            222
#遇到return,此函数结束,不在向下执行

2.return返回值

  ①不写return 返回 None
  ②return None 返回 None
  ③return 单个值 返回此单个值
  ④return 多个值 将多个值包在元组中,返回给调用者此元组


def
my_len(): l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3] count = 0 for i in l1: count += 1 return count #返回单个值,count ret = my_len() #然后调用 赋值到ret上 print(ret) #输出:9
def my_len():
    l1 = [1, 2, 3, 4, 5, 6, 5, 4, 3]
    count = 0
    for i in l1:
        count += 1
    return 1,2,[123,2]      #多个值包在元组中
ret1,ret2,ret3 = my_len()    # (1,2,[123,2]),元组给单个变量分别赋值
print(ret1,ret2,ret3)
#输出:1 2 [123, 2]

参数:

l1=[1,2,3,4,5,6,7]
def my_len(x):  #形参:形式参数
    count = 0
    for i in x:
        count += 1
    return count
ret = my_len(l1)  # 实参:实际参数
print(ret)

传参

1.从实参的角度:
  ①按位置传参


def max(x,y):  
z = x if x > y else y
return z
ret = max(100,200) #按位置:x对应100,y对应200
print(ret)
#参数必须一一对应

  ②按关键字传参

def func(x,y):
    z = x if x > y else y
    return z
s = func(y = 2,x = 3) #关键字传参
print(s)

  ③混合传参 关键字参数永远在位置参数后面

def func(x,y):
    z = x if x > y else y
    return z
s = func(2,y= 3) #混合传参,关键字参数永远在位置参数后面
print(s)

2. 从形参角度:

     ①位置参数

     ②默认参数

def func(name,sex=''):     #sex默认的值是“男”
    with open('name_list','a',encoding='utf-8') as f1:
        f1.write('{}  {}\n'.format(name,sex))
while True:
    name = input('请输入名字:')
    if '' in name:
        sex = input('请输入性别:')
        func(name,sex) #  混合
    else:
        func(name)

  ③动态参数

*  

def func(*args):
    print(args,type(args))
func(1,2,'alex',3,4,5,6,8,4,7,2)
#输出:(1, 2, 'alex', 3, 4, 5, 6, 8, 4, 7, 2) <class 'tuple'>
#按位置,接收所有,输出元组
----------------------------
def func(a,b,c,*args):
print(a)
print(b)
print(c)
print(args)
func(1,2,'alex',3,4,5,6,7,8)
#输出:

  1
  2
  alex
  (3, 4, 5, 6, 7, 8)    *args接收剩余所有,以元组形式

 

**

def func(a,b,**kwargs):
    print(a)
    print(b)
    print(kwargs,type(kwargs))
func(a=1,b=2,c=3,d=4,e=5)
#输出:      1
            2
           {'c': 3, 'd': 4, 'e': 5} <class 'dict'>
#接收所有按关键字传的参数,然后以字典形式表现出来

万能参数:

def func2(*args,**kwargs):
    print(args)
    print(kwargs)
func2(1,2,3,5,name='alex',age=56)
#输出:   (1, 2, 3, 5)
#            {'name': 'alex', 'age': 56}
#接收所有参数  按位置 以元组展现, 按关键字  以字典形式展现
        

魔法运算:

 ①*

def func(*args):
    print(args)
s = "12345"
#输出:('1', '2', '3', '4', '5')
------------------------------------
def func2(*args):
    print(args)
l1 = [1,2,3,]
l2 = [1,2,3,2,3,100,2]
func2(*l2,*l1)
#输出:(1, 2, 3, 2, 3, 100, 2, 1, 2, 3)
#加*  打散,加入新的元组里,两个列表写在一起,就把所有的放在一个元组里

②**

def func3(**kwargs):
    print(kwargs)
dic = {'name1':'alex','age1':12}
dic2 = {'name2':'jin','age2':22}
func3(**dic,**dic2,name3 = 'wusir')
#输出:{'name1': 'alex', 'age1': 12, 'name2': 'jin', 'age2': 22, 'name3': 'wusir'}
#把所有字典以键值对的形式打散,加入到一个字典

 形参的接收顺序:

位置参数、*args、默认、**kwargs

posted on 2018-01-31 18:48  刘。林  阅读(143)  评论(0编辑  收藏  举报

导航