zoukankan      html  css  js  c++  java
  • python之函数的定义、传参以及动态参数

    函数的优点:
    减少代码的重复率。
    增强代码的可读性

    函数到底是声明:
    函数最主要的目的:封装一个功能

    工作中,函数中尽量不要出现print

    # def 关键字 函数名():
    # def my_len():
    #     # 函数体
    #     l = [2,3,5,5,6,7,77,8]
    #     count = 0
    #     for i in l:
    #         count += 1
    #     print(count)
    # my_len() # 执行函数  函数名()
    

    # 函数的返回值 return
    1. 函数中如果遇到return,则直接结束函数。
    2. 给函数的执行者返回值。 
    return None
    return 单个值 原封不动的返回
    return 多个值 一个元组,所有的返回值作为元组的元素 

     

    # 函数的返回值 return
    #
    # def func1():
    #     print(111)
    #     print(222)
    #     return
    #     print(333)
    # func1()  # 整体是函数的执行者
    # print(func1())
    
    #
    # def func1():
    #     a = 1
    #     b = 2
    #     c = a + b
    #     d = 'alex'
    #     e = [1, 2, 3]
    #     return c, d, e
    # # print(func1())
    # res1, res2, res3 = func1()
    # print(res1)
    # print(res1, res2, res3)
    # print(res3)
    # print(func1)  # <function func1 at 0x0000027F914399D8> 函数的内存地址
    

      

    函数的传参:
    实参:
    位置参数: 按照顺序,一一对应。
    关键字参数: 可以不按照顺序,但是必须一一对应
    混合参数: 关键字参数一定要在位置参数后面。
    形参
    位置参数: 按照顺序,一一对应。
    默认参数: 给其传值,将原默认参数覆盖掉。不传值,不报错,使用默认值
    应用场景:不经常改变的参数,

    # l1 = [2.3,35,6]
    # def my_len(argv):  # 形式参数 形参
    #     # 函数体
    #     # l = [2,3,5,5,6,7,77,8]
    #     count = 0
    #     for i in l:
    #         count += 1
    #     print(count)
    # print(my_len(l1))  # 函数的执行者(实参),实际的参数
    
    
    # def func1(a, b):
    #     sum1 = a + b
    #     return sum1
    #
    #
    # print(func1(1, 5))
    #
    #
    # def func2(a, b):
    #     # the_max = a if a > b else b
    #     # return the_max
    #     return a if a > b else b
    #
    # print(func2(6, 3))
    
    # 三元运算:只针对简单的if else这样的结构,才可以使用
    

      

     1 def name_list(n1,s1= ''):
     2     with open('info',encoding='utf-8',mode='a') as f1:
     3         f1.write('{}|{}
    '.format(n1, s1))
     4 
     5 while 1:
     6     name,sex = input('请输入姓名,性别:以,隔开').strip().replace('', ',').split(',')
     7     if name.upper() == 'Q':break
     8     if sex.strip():
     9         name_list(name,sex)
    10     else:
    11         name_list(name)
    创建记录学生信息的文件

    默认参数的陷阱

    # 默认参数的陷阱
    # 默认参数若是可变的数据类型,他始终使用的是同一个。内存地址是一样的
    #
    # def func1(x,l1 = []):
    #     l1.append(x)
    #     return l1
    # res = func1(1)
    # print(res, id(res))   #[1] 2301277921864
    # res2 = func1(100)
    # print(res2, id(res2))  #[1, 100] 2301277921864
    

      

    动态函数

    你的函数,为了拓展,对于传入的实参数量不固定,就需要万能参数,动态参数:*args,**kwargs
    
    def func1(argv):  #形参
        pass
    
    def func2(*args):  #在函数的定义时,在*位置参数,聚合。
        pass            # *args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args
    
    def func3(**args)    # kwargs接收的只是键值对的参数,并保存在字典中。
    
    
    # def func1(**kwargs):
    #     # print(args)
    #     print(kwargs)
    #
    # func1(name = 'alex', age = 100)
    #
    # def cal(*args):
    #     sum1 = 0
    #     for i in args:
    #         sum1 += i
    #     return sum1
    #
    # print(cal(1,2,3,4))
    
    
    
    * 的魔性用法
    在函数的定义时,在*位置参数,**位置参数 聚合
    在函数的调用(执行)的时候,在*位置参数 **位置参数,打散
    
    l1 = [1,2,3]
    l2 = [111,22,33,'alex']
    
    def func2(*args):
        print(args)
    
    
    func2(*l1,*l2)   # (1, 2, 3, 111, 22, 33, 'alex')
    

    形参的顺序
    位置参数 ,*args,默认参数,**kwargs

    # def func1(a,b,*args,sex='male',**kwargs):
    #     print(a,b)
    #     print(args)
    #     print(sex)
    #     print(kwargs)
    #
    #
    # func1(1000, 2000, 2, 3, 55, 6, sex='female', name='alex', age='33')
    

      

      

  • 相关阅读:
    【java框架】SpringBoot(3) -- SpringBoot集成Swagger2
    【java框架】SpringBoot(2) -- SpringBoot主要注解说明
    【java框架】SpringBoot2(1) -- SpringBoot2入门及基础配置
    【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验
    UUID随机验证码
    MySQL汇总
    使用waitgroup在循环中开Goroutine处理并发任务
    使用Go处理SDK返回的嵌套层级数据并将所需字段存入数据库(一)
    Go时间相互转换的处理
    go常用操作
  • 原文地址:https://www.cnblogs.com/eaoo/p/9481674.html
Copyright © 2011-2022 走看看