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

    函数能提高应用的模块性,和代码的重复利用率。

    函数应保持清晰性,接参返结果,用户交互操作在函数外进行或将函数分为两大类,一类只做事,不需要返回结果(如与用户交互或设置变量的值),另一类则执行一些运算,最后返回结果,最好不要在函数中用print语句输出信息

    Python提供了许多内建函数,比如print(),max()和min()可传多个参数比较。

    但你也可以自己创建函数,这被叫做用户自定义函数。

    1.自定义函数

    语法

    Python 定义函数使用 def 关键字,一般格式如下:

    def 函数名(参数列表):
        函数体

    默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

    return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 def my_abs (x):
    5     if x >= 0:
    6         return x
    7     else:
    8         return -x
    9 print(my_abs(-99))

    isinstance()   实例  对参数类型做检查

     1 #!/usr/bin/python3
     2 # -*- coding:utf-8 -*-
     3 
     4 def my_abs (x):
     5     #如果参数x不是int或float则抛出一个类型异常
     6     if not isinstance(x,(int,float)):
     7         raise TypeError('bad operand type')
     8     if x >= 0:
     9         return x
    10     else:
    11         return -x
    12 print(my_abs('-99'))

    2.参数类型

    以下是调用函数时可使用的正式参数类型:

    • 必需参数
    • 关键字参数
    • 默认参数
    • 不定长参数

    必需参数

    必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样,不然会出现语法错误。

    关键字参数

    关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值,以字典的形式。

    使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 def printInfo( name, age ):
    5     print ("名字:", name)
    6     print ("年龄:", age)
    7     return
    8 
    9 printInfo( age = 100, name = "chb")

    默认参数

    调用函数时,如果没有传递参数,则会使用默认参数。

     1 #!/usr/bin/python3
     2 # -*- coding:utf-8 -*-
     3 
     4 def printInfo( name, age = 21 ):
     5     print ("名字:", name)
     6     print ("年龄:", age)
     7     return
     8 
     9 printInfo( age = 100, name = "chb")
    10 print('--------------------------')
    11 printInfo( name = "chb" )

    不定长参数

    你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数(也称可变参数),和上述 2 种参数不同,声明时不会命名。

    加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 def printInfo( age, *vartuple ):
    5     print(age)
    6     print(vartuple)
    7 
    8 printInfo( 11, 22, 33, 44)

    参数组合先后顺序:必需、默认、不定长、关键字

    3.匿名函数

    Python 使用 lambda 来创建匿名函数。

    所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

    • lambda 只是一个表达式,函数体比 def 简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 sum = lambda arg1, arg2: arg1 + arg2
    5 #关键字lambda表示匿名函数,冒号前面表示函数参数,冒号后面就是要做的事情
    6 
    7 print ("相加后的值为 : ", sum( 10, 20 ))
    8 print ("相加后的值为 : ", sum( 30, 40 ))

    4.变量作用域

    变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

    • L (Local) 局部作用域
    • E (Enclosing) 闭包函数外的函数中
    • G (Global) 全局作用域
    • B (Built-in) 内置作用域(内置函数所在模块的范围)

    以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

    1 g_count = 0  # 全局作用域
    2 def outer():
    3     o_count = 1  # 闭包函数外的函数中
    4     def inner():
    5         i_count = 2  # 局部作用域

    global 和 nonlocal关键字

    当内部作用域想修改外部作用域的变量时,就要用到global(全局)和nonlocal(非局部)关键字了。

    以下实例修改全局变量 num:

     1 #!/usr/bin/python3
     2 # -*- coding:utf-8 -*-
     3 
     4 num = 1
     5 def fun():
     6     global num   #需要使用global关键字声明
     7     print(num)
     8     num = 333
     9     print(num)
    10     
    11 fun()
    12 print(num)

    如果要修改嵌套作用域中的变量则需要 nonlocal 关键字了,如下实例:

     1 #!/usr/bin/python3
     2 # -*- coding:utf-8 -*-
     3 
     4 def outer():
     5     num = 10
     6     def inter():
     7         nonlocal num  #nonlocal关键字声明
     8         num = 100
     9         print(num)
    10     inter()
    11     print(num)    
    12 outer()

  • 相关阅读:
    Spring-data-jpa和mybatis的比较及两者的优缺点?
    http和https的区别
    Springboot中spring-data-jpa实现拦截器
    RabbitMQ客户端页面认识
    设计模式之策略模式
    设计模式之策略模式应用实例(Spring Boot 如何干掉 if else)
    设计模式之装饰器模式
    网页跳转小程序
    好帖子
    git 回滚操作
  • 原文地址:https://www.cnblogs.com/bfcs/p/10735022.html
Copyright © 2011-2022 走看看