zoukankan      html  css  js  c++  java
  • Python之函数

    函数

    函数:实现某种功能(数学形式、python def函数式编程)

    过程:就是函数没有返回值

    参数

    1、形参 实参 位置参数 关键字参数 默认参数

     1 # 形参x,y不分配内存空间  实参2,3在调用的时候才分配空间,调用完毕就释放空间
     2 def calc(x, y):
     3     res = x ** y
     4     return res
     5 
     6 
     7 c = calc(2, 3)
     8 print(c)
     9 
    10 
    11 def test(x, y, z):
    12     print(x)
    13     print(y)
    14     print(z)
    15 
    16 
    17 # 位置参数(一一对应,缺一不行,多一不行)
    18 test(1, 2, 3)
    19 # 关键字参数(位置不固定,缺一不行,多一不行)
    20 test(x=1, y=2, z=3)
    21 # 混合使用:位置参数必须在关键字参数左边
    22 test(1, 2, z=3)
    23 # test(1, 2, z=3, y=4) # 特殊情况仍然要报错
    24 
    25 
    26 # 默认参数
    27 def handle(x, y='mysql'):
    28     print(x)
    29     print(y)
    30 
    31 
    32 handle('hello')
    33 handle('hello', 'sqlite')

     2、参数组 *args(列表) **kwargs  (字典)

     1 # 参数组 **字典 *列表
     2 
     3 
     4 # def test(x, *args):
     5 #     print(x)
     6 #     print(args)
     7 #     print(args[0])
     8 
     9 
    10 # test(1, 2, 3, 4, 5, 6)
    11 # test(1, *['x', 'y', 'z'])  # ('x', 'y', 'z')
    12 # test(1, ['x', 'y', 'z'])   # (['x', 'y', 'z'],)
    13 
    14 # def test(x, **kwargs):
    15 #     print(x)
    16 #     print(kwargs)
    17 #
    18 #
    19 # test(1, y=2, z=3)   # {'y': 2, 'z': 3}
    20 
    21 
    22 # def test(x, *args, **kwargs):
    23 #     print(x)
    24 #     print(args)
    25 #     print(kwargs)
    26 #
    27 #
    28 # test(1, 2, 3, 4, 5, y=1, z=2)
    29 # test(1, *[1, 2, 3], **{'y': 1})
     1 def test(x, *args, **kwargs):
     2     print(x)
     3     print(args)
     4     print(kwargs)
     5 
     6 
     7 test(1, 2, 3, 4, 5, y=1, z=2)   # 1 (2, 3, 4, 5) {'y': 1, 'z': 2}
     8 test(1, *[1, 2, 3], **{'y': 1})   # 1 (1, 2, 3) {'y': 1}
     9 test(1, [1, 2, 3], **{'y': 1})   # 1 ([1, 2, 3],) {'y': 1}
    10 test(1, 2, 3, {'name': 'eric'})   # 1  (2, 3, {'name': 'eric'}) {}
    不定长参数

    局部变量与全局变量

    1、局部变量:子程序中的变量(有缩进)

    2、全局变量:没有缩进,在全局都可以使用

     1 # 局部与全局变量
     2 # name = "火爆哥"
     3 #
     4 #
     5 # def change_name():
     6 #     global name  # ------>其实是指针指向全局变量name的值
     7 #     name = "帅的一比"
     8 #     print('change_name', name)
     9 #
    10 #
    11 # change_name()
    12 # print(name)
    13 
    14 # name = "刚娘"
    15 #
    16 #
    17 # def weihou():
    18 #     name = "陈卓"
    19 #
    20 #     def weiweihou():
    21 #         nonlocal name  # ----->nonlocal指针指向name="陈卓"(上一级) global是指向全局的变量name = "刚娘"
    22 #         name = "冷静"
    23 #     weiweihou()
    24 #     print(name)
    25 #
    26 #
    27 # print(name)  # 刚娘
    28 # weihou()     # 冷静
    29 # print(name)  # 刚娘

    前向引用

     1 # def bar():
     2 #     print('from bar')
     3 #
     4 #
     5 # def foo():
     6 #     print('from foo')
     7 #     bar()
     8 #
     9 #
    10 # foo()
    11 
    12 
    13 # def foo():
    14 #     print('from foo')
    15 #     bar()
    16 #
    17 #
    18 # def bar():
    19 #     print('from bar')
    20 #
    21 #
    22 # foo()
    23 # 从这里可以说明函数即变量
    24 # foo = '函数体'

    函数递归(先搞个简单的例子,后期持续更新中)

    记住:一层层的进去然后再一层层的返回来(要有点节制,不能无穷无尽,官方说1300多层左右貌似)

    递归:函数自己调用自己,且有终止条件即可

    1 def clac(n):
    2     print(n)
    3     if int(n / 2) == 0:
    4         return n
    5     return clac(int(n / 2))
    6 
    7 
    8 res = clac(10)
    9 print(res)

    上图来说

     函数作用域

     1 name = 'china'
     2 
     3 
     4 def foo():
     5     # name = 'sichuan'
     6 
     7     def bar():
     8         # name = 'chengdu'
     9         print(name)
    10     return bar
    11 
    12 
    13 a = foo() # ---->bar
    14 print(a)  # bar 内存地址
    15 a()       # a()==foo()() 执行bar()函数找name一层层找
  • 相关阅读:
    Tom&Jerry_team——测试总结
    OMCP sprint 第7天
    OMCP sprint 第6天
    OMCP sprint 第5天
    OMCP sprint 第4天
    OMCP sprint 第3天
    OMCP sprint 第2天
    SQL SERVER 如何恢复bak备份文件
    Ext JS
    Linnx环境下常用命令
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11188277.html
Copyright © 2011-2022 走看看