zoukankan      html  css  js  c++  java
  • Python基础—函数(Day9)

    一、函数的定义

    • def 关键字,定义一个函数
    • my_len 函数名(书写规则与变量名一样)
    • def与函数名中间一个空格。
    • def与函数名中间一个空格。
    • 函数名():加冒号
    • 函数体
    • my_len()#函数的执行:函数名+()
    函数是从上到下依次执行,将函数名加载到内存,函数体放到一个临时存储空间,见到函数名执行。
    # li=[1,2,2,4,6,7,4,5]
    # def my_len():
    #     count=0
    #     for i in li:
    #         count+=1
    # my_len()

    二、函数的返回值

    return

    1.在函数中遇到return结束函数。

    def fun():
        print(111)
        return
        print(222)
    a=fun()
    print(a)

    执行结果:

       111
       None

    2.将值返回给函数的调用者。

     1)无return 返回None

     2)只写renturn None。

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

    def  mylen():
        s1='hello world'
        length=0
        for i in s1:
            length=length+1
        return length
    str_len=mylen()
    print('str_len: %s'%str_len)
    
    执行结果:
    str_len: 11

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

    def fun():
        return 1,2,[3,4],'guo'
        print(222)
    a=fun()
    print(a)
    
    执行结果:
    (1, 2, [3, 4], 'guo')

    三、函数的参数

    1.实参

     1)位置传参:按顺序一一对应。

    def func(a,b,c):
        print(a)
        print(b)
        print(c)
    func(1,2,3)
    
    1
    2
    3
    #写一个函数功能比大小
    def max_min(a,b):
         if a>b:
             return a
         else:
             return b
     print(max_min(100,20))
    #可以用三元运算符来写:
     def max_min(a,b):
         return a if a > b else b
     print(max_min(100,20))

     2)关键字传参:不按顺序,按关键字一一对应。

    def max_min(a,b):
        return a if a > b else b
    print(max_min(b=200,a=100))
    
    200

     3)位置和关键字混合传参:关键字参数在最后,位置一一对应。

    def fun(a,b,c,d):
        print(a)
        print(b)
        print(c)
        print(d)
    fun(1,2,c=3,d=4)
    fun(a=1,b=2,3,4)#关键字参数在前面会报错

    2.形参

     1)位置传参:按顺序一一对应。

    def func(a,b,c):
        print(a)
        print(b)
        print(c)
    func('ssdd',3,4)
    ssdd
    3
    4

     2)默认参数:传参则覆盖,不传则默认,默认参数在位置参数后面。

    def func(a,b=22):
        print(a,b)
    func(11,33)   #11 33 传参则覆盖原来的22
    
    def func(a,b=22):
        print(a,b)
    func(11)  #11 22 不传参默认原来的参数

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

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

    def func(*args):
        print(args)
    func(1,2,3,4,5,6)
    
    执行结果:
    (1, 2, 3, 4, 5, 6)

    **kwargs将所有的关键字参数(无实参对应的关键字参数)放到一个字典中。

    def func(a,b,c,**kwargs):
        print(kwargs)
    func(1,2,r=4,b1=5,c1=6,c=7)
    
    执行结果:
    {'c1': 6, 'r': 4, 'b1': 5}

    形参的最终顺序:位置参数,*args,默认参数,**kwargs.

    def func(a,b,c,*args,d='',**kwargs):
        print(a)
        print(b)
        print(c)
        print(args)
        print(d)
        print(kwargs)
    func(1,2,3,4,5,6,7,d='',v=8,m=9,f=22)
    执行结果:
    1
    2
    3
    (4, 5, 6, 7)
    女
    {'m': 9, 'v': 8, 'f': 22}

    *的魔法运用:

    1.在函数的调用执行时:

    *+可迭代对象,代表打散list,tuple,str,dict(键),将元素一一添加到args。

    **+字典,代表打散,将所有键值对放到一个kwargs字典里。

    def func(*args):
        print(args)
    l1=[1,2,3,]
    l2=[1,2,3,22,33,44]
    tu=(1,2,3)
    func(*'fgjjkkll')
    func(*l1,*l2)   #函数的调用
    func(*tu)
    func(*{'name':'guo','age':'18'})#键添加到args
    
    执行结果:
    ('f', 'g', 'j', 'j', 'k', 'k', 'l', 'l')
    (1, 2, 3, 1, 2, 3, 22, 33, 44)
    (1, 2, 3)
    ('age', 'name')
    def func(**kwargs):
        print(kwargs)
    dic1={'name1':'guo','age1':'18'}
    dic2={'name':'tu','age':'45'}
    func(**dic1,**dic2)
    
    执行结果:
    {'name1': 'guo', 'name': 'tu', 'age1': '18', 'age': '45'}

    2.在函数定义时,*args,**kwargs代表的是聚合。

    def func(*args,**kwargs):
        print(args)
        print(kwargs)
    dic1={'name1':'guo','age1':'18'}
    dic2={'name':'tu','age':'45'}
    func(*[1,2,3,4,5],*'fghj',**dic1,**dic2)
    
    执行结果:
    (1, 2, 3, 4, 5, 'f', 'g', 'h', 'j')
    {'age1': '18', 'age': '45', 'name': 'tu', 'name1': 'guo'}

    练习题

    编写名单文件

    def Infor_entry(username,sex=''):
        with open('name_list',encoding='utf-8',mode='a') as f:
            f.write('{}	{}
    '.format(username,sex))
    while True:
        username=input('请输入姓名(男生以1开头):').strip()
        if '1'in username:
            username=username[1:]
            Infor_entry(username)
        else:
            Infor_entry(username,'')
  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业
    预备作业3
    预备作业2
    预备作业01
    ## 20155336 2016-2017-2《JAVA程序设计》第十周学习总结
    20155336 2016-2017-2《JAVA程序设计》第九周学习总结
    ## 20155336 2016-2017-2《JAVA程序设计》第八周学习总结
    20155336 2016-2017-2《JAVA程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/facestore/p/8664701.html
Copyright © 2011-2022 走看看