zoukankan      html  css  js  c++  java
  • 函数、变量、参数

    函数

    概念

    函数是一个功能,是代码复用的通用机制

    分类

    1.内置函数

    2.标准库中的函数

    3.第三方库的函数

    4.自定义函数

    语法

    def 函数名(参数列表):

      代码块

    注意:

    return返回值:如果有return语句,则结束函数并返回值,如若没有则返回None

    lambda 表达式和匿名函数 

    lambda 表达式可以用来声明匿名函数。lambda 函数是一种简单的、在同一行中定义函数 的方法。lambda 函数实际生成了一个函数对象。
    lambda 表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数 的返回值。 

    f = lambda a,b:a+b
    print(f(2,3))   #5

    递归函数

    递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己 

    每个递归必须包含两个部分:

    1. 终止条件

    表示递归什么时候结束。一般用于返回值,不再调用自己。 2. 递归步骤

    把第 n 步的值和第 n-1 步相关联。 

    def digui(n):
        if n == 1:return 1
        return n*digui(n-1)
    for i in range(1,6):
        print(i,'!=',digui(i))
    #运行结果:
    1 != 1
    2 != 2
    3 != 6
    4 != 24
    5 != 120

    嵌套函数

    def printTest(isNan,name,age):
        def inner(a,b):
            print("{0} is {1}".format(a,b))
    
        if isNan ==True:
            inner(name,age)
        else:
            inner(age,name)
    printTest(True,'张三',18)
    printTest(False,'静静',18)
    #运行结果:
    张三 is 18
    18 is 静静

    变量

    1.变量的作用域(全局变量,局部变量)

    全局变量:

    a. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块 结束。

    b.全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。

    c.全局变量一般做常量使用。

    d.函数内要改变全局变量的值,使用 global 声明一下

    局部变量:

    a. 在函数体中(包含形式参数)声明的变量。

    b. 局部变量的引用比全局变量快,优先考虑使用。

    c. 如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量 

    a = 123
    def change():
        global a  #在方法中要修改全局变量,必须要加global,要不然就报错了
        print(a)
        a = 300
    change()
    print(a)
    #运行结果:
    123
    300

    参数

    本质

    函数的参数传递本质上就是:从实参到形参的赋值操作。 Python 中“一切皆对象”, 所有的赋值操作都是“引用的赋值”。所以,Python 中参数的传递都是“引用传递”,不 是“值传递”。具体操作时分为两类:

    1. 对“可变对象”进行“写操作”,直接作用于原对象本身。

    2. 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填 充这块空间。(起到其他语言的“值传递”效果,但不是“值传递”)

    可变对象有:
      字典、列表、集合、自定义的对象等
    

    不可变对象有: 数字、字符串、元组、function 等 

    分类

    1.位置参数

    函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为: “位置参数” 

    def add(a,b,c):
        print(a+b+c)
    
    add(1,2,4)
    add(1,2)

    运行结果:

    7
    Traceback (most recent call last):
    File "/Users/gray/PycharmProjects/test/test004.py", line 7, in <module>
    add(1,2)
    TypeError: add() missing 1 required positional argument: 'c'

    2.默认参数

    我们可以为某些参数设置默认值,这样这些参数在传递时就是可选的。称为“默认值参数”。 默认值参数放到位置参数后面。 

    def add(a,b=10,c=20):
        print(a+b+c)
    
    add(1)  #1+10+20=31
    add(1,2) #1+2+20=23

    3.命名参数

    我们也可以按照形参的名称传递参数,称为“命名参数”,也称“关键字参数 

    def add(a,b,c):
        print(a+b+c)
    add(c=10,a=2,b=20) #10+2+20=23

    4.可变参数

    可变参数就是可变数量的参数

    a. *param(一个星号),将多个参数收集到一个“元组”对象中。

    b. **param(两个星号),将多个参数收集到一个“字典”对象中。

    def add1(a,b,*c):
        print(a,b,c)
    def add(a,b,**c):
        print(a,b,c)
    add1(1,2,4,5,6,7,8)
    add(1,2,name='kang',age=18)
    # 运行结果:
    1 2 (4, 5, 6, 7, 8)
    1 2 {'name': 'kang', 'age': 18}
    def print_info(*a,**c):
        print("name : %s" %(a))
        print('a',a)
        print('c',c)
        for i in c:
            print("%s : %s" %(i,c[i]))
    print_info("kang",job='IT',age=12,height=176)
    #运行结果:
    name : kang
    a ('kang',)
    c {'job': 'IT', 'age': 12, 'height': 176}
    job : IT
    age : 12
    height : 176
    
    def add(*args):
        print(args)
        sum = 0
        for i in args:
            sum += i
        print(sum)
    add(1,2,3,4,5)  #15

    5.强制命名参数

    在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数” 

    def add(*a,b,c):
        print(a,b,c)
    add(1,2,4,5,6,b=7,c=8)  #(1, 2, 4, 5, 6) 7 8
    add(1,2,4,5,6,7,8)  #TypeError: add() missing 2 required keyword-only arguments: 'b' and 'c  由于 a 是可变参数,将值全部收集。造成 b 和 c 没有赋值
  • 相关阅读:
    面试试题
    使用NSURLSessionDataTask请求数据(get post方式)
    使用SSZipArchive第三方库解压zip包
    实现图文混编界面
    使用多线程创建单例对象
    SQL语句的种类_外键_表连接(内连接和左外连接)
    使用第三方库(FMDB) 本地数据库存储数据 --使用为了保证线程安全做法
    利用第三方库XML解析 (TBXML)转化成模型数据
    蓝牙传送_多点连接 (适用于>iOS7)
    Unity 产生各不相同的随机数
  • 原文地址:https://www.cnblogs.com/elephant-study/p/11890877.html
Copyright © 2011-2022 走看看