9.python(第九天日记)

初识函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print(),len()等。但你也可以自己创建函数,这被叫做用户自定义函数。

1.函数定义

  1>定义,使用函数

    1. def 关键字,定义一个函数。

    2. 函数名与变量命命名规则一样

    3. def与函数名之间有一个空格

    4. 函数名之后+括号和冒号

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

   结论:函数的使用,必须遵循原则:先定义,后调用。我们在使用函数时,一定要明确地区分定义阶段和调用阶段

调用:就是 函数名() 加上括号。

    5.函数定义阶段:只检测语法,不执行代码

注释:也就说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行时才会知道

  2>函数分类

    1.有参

def tell_tag(tag,n): #有参数
    print(tag*n)
#调用阶段
tell_tag('*',12)
注释:定义时有参,意味着调用时则必须传入参数

 

    2.无参

def tell_msg(): #无参数
    print('hello world')
#调用阶段
tell_msg()
注释:定义时无参,意味着调用时也无需传入参数

 

    3.空

def auth(user,password):                             
    '''                                                           
    auth function                                                 
    :param user: 用户名                                              
    :param password: 密码                                           
    :return: 认证结果                                                 
    '''                                                           
    pass                                                          
                                                                  
def get(filename):                                                
    '''                                                           
    :param filename:                                              
    :return:                                                      
    '''                                                           
    pass                                                          
                                                                  
def put(filename):                                                
    '''                                                           
    :param filename:                                              
    :return:                                                      
    '''                                                           
def ls(dirname):                                                  
    '''                                                           
    :param dirname:                                               
    :return:                                                      
    '''                                                           
    pass                                                          

#程序的体系结构立见           

空函数
View Code

 

  3>调用函数:函数名之后+括号

    1 先找到名字
    2 根据名字调用代码

    3 函数调用的3种形式:

        1 语句形式:foo()
        2 表达式形式:3*len('hello')
        3 当中另外一个函数的参数:range(len('hello'))

2.函数的返回值:

    1.在函数中遇到return终断函数

    2.将值返回给函数的调用者注释:   

  什么时候该有返回值?    

    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值。通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果

  什么时候不需要有返回值?    

    调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值。通常无参函数不需要有返回值

      返回值:

        1.return后面没有返回值  

def my_len():
    st = 'abcd'
    count = 0
    for i in st:
        count += 1
    return
print(my_len())
>>>None

        2.return返回值是None

def my_len():
    st = 'abcd'
    count = 0
    for i in st:
        count += 1
    return None
print(my_len())
>>>None

        3.return 1个值,该值是什么,就直接返回给函数的调用者,函数名()

def my_len():
    st = 'abcd'
    count = 0
    for i in st:
        count += 1
    return 123
print(my_len())
>>>123

        4.return 多个值,将多个值放到一个元组里,返回给函数的调用者。

def my_len():
    st = 'abcd'
    count = 0
    for i in st:
        count += 1
    return 1,2,3
print(my_len())
>>>(1,2,3)

        5.return 多个值,用多个值接收。

def my_len():
    st = 'abcd'
    count = 0
    for i in st:
        count += 1
    return 1,2,3
a,b,c = my_len()
print(a,b,c)
>>>1,2,3

3.函数的传参

注释:形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定

a = input('请输入: ')
def my_len(s):
    count = 0
    for i in s:
        count += 1
    return count
print(my_len(a))

  

    1.实参:我们调用函数时传递的这个 a 被称为实际参数,因为这个是实际的要交给函数的内容,简称实参

      1.按照位置传值

def max_min(x,y):
    the_max = x if x > y else y    #三元运算(三元:x,y,the_max)
    return the_max
ma = max_min(10,20)
print(ma)

       2.按照关键字传值

def max_min(x, y):
    the_max = x if x > y else y
    return the_max
ma = max_min(y = 10,x = 20)
print(ma)

      3.混合传参

def max_min(x, y):
    the_max = x if x > y else y
    return the_max
ma = max_min(10,y = 20)
print(ma)

注释:1:位置参数必须在关键字参数的前面

   2:对于一个形参只能赋值一次

 

    2.形参:定义函数时的s,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。

      1.按照位置传值

def max_min(x,y):
    the_max = x if x > y else y    #三元运算(三元:x,y,the_max)
    return the_max
ma = max_min(10,20)
print(ma)

 

      2.默认参数     #方法:将变化比较小的值设置成默认参数

def Infor_entry(username, sex=''):
    with open('name_list', encoding='utf-8', mode='a') as f1:
        f1.write('{}\t{}\n'.format(username, sex))
while True:
    username = input('请输入姓名(男生以1开头)').strip()
    if '1' in username:
        username = username[1:]
        Infor_entry(username)
    else:
        Infor_entry(username, '')

       3.动态参数(万能参数)

     *args接受的就是实参对应的 所有位置参数,并将其放在元组中。

      形参对应顺序:位置参数  ------>  *args  ------>  默认参数

     **kwargs 动态传参,他将所有的关键字参数(无意义的)放到一个字典中。

      形参角度终顺序:位置参数------>  *args  ------>  默认参数  ------>  **kwargs

   def foo(x,y,*args):
            print(x,y)
            print(args)
        foo(1,2,3,4,5)

        def foo(x,y,*args):
            print(x,y)
            print(args)
        foo(1,2,*[3,4,5])


        def foo(x,y,z):
            print(x,y,z)
        foo(*[1,2,3])

 

   def foo(x,y,**kwargs):
            print(x,y)
            print(kwargs)
        foo(1,y=2,a=1,b=2,c=3)

        def foo(x,y,**kwargs):
            print(x,y)
            print(kwargs)
        foo(1,y=2,**{'a':1,'b':2,'c':3})


        def foo(x,y,z):
            print(x,y,z)
        foo(**{'z':1,'x':2,'y':3})

 

 def foo(x,y):
            print(x,y)

        def wrapper(*args,**kwargs):
            print('====>')
            foo(*args,**kwargs)

   4.*的魔法应用:

   在函数的执行(调用)时:打散。

      *可迭代对象(str,tuple,list,dict(key))每一个元素添加到args元组中。

      **dict 将字典的键值对添加到kwargs字典中.

def func(*args,**kwargs):
    args = (1,2,3,4)
    # kwargs = {'age': 56, 'name': '老男孩'}
    print(*args)
    # print(**kwargs) #(age = 56 ,name = 老男孩)
dic1 = {'name1':'alex','age1':46}
dic2 = {'name':'老男孩','age':56}
func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)
func(**dic2)

 

   函数的定义时: 聚合。

      *args将所有的位置参数聚合到一个元组中。

      **kwargs 将所有的关键字参数聚合到一个字典中。


def func(*args,**kwargs):
    print(args)
    print(kwargs)
dic1 = {'name1':'alex','age1':46}
dic2 = {'name':'老男孩','age':56}
func(*[1,2,3,4],*'asdfsad',**dic1,**dic2)

 

      

 

  

  

 

  

            

 

posted on 2018-03-28 17:33  小鸡刨粑粑  阅读(109)  评论(0编辑  收藏  举报

导航