PHP前端开发

python中函数部分内容的解析

百变鹏仔 2个月前 (02-06) #Python
文章标签 部分内容

本篇文章给大家带来的内容是关于python中函数部分内容的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在python中,变量没有类型,一个对象的引用,类型属于对象
变量的本质上是一个占位符!通常用小写字母命名变量。

一:语法

def 函数名(参数列表):
 函数体
(函数名命名一般用小写字母 + 单下划线数字等组合)

二:常用函数的类型

立即学习“Python免费学习笔记(深入)”;

(1)带参数的函数:参数须以正确的顺序传入函数

(2)默认参数函数:未传递参数,则会使用默认参数,默认参数不在最后,会报错!

(3)关键字参数:函数调用使用关键字参数来确定传入的参数值

(4)不定长参数:函数能处理比当初声明时更多的参数,

①*args中所有的变量都会被包装成一个元组存放所有未命名的变量
②**args中所有变量都会被包装成一个字典

(5)声明函数时,参数中星号 * 可以单独出现,*之后的的参数必须用关键字传入

(6)匿名函数,使用lambda函数创建匿名函数

①lambda 只是一个表达式,函数体比 def 简单很多
②lambda的主体是一个表达式,而不是一个代码块
③函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

三:python 函数的参数传递:

不可变类型:

类似 c++ 的值传递,如 int、string、tuple。
如fun(a),传递的只是a的值,没有影响a对象本身。
比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身.

可变类型:

类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象

四:变量作用域

python 中的作用域一般有四种:

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域

查找规则是L->E->G->B

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

五:全局变量与局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

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

(1)global用来修改全局变量的值

(2)nonlocal要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了

六:函数调用中的技巧(重要)

函数名.__doc__获取函数的帮助文档

函数名可以作为另一个函数的形参

多个返回值以元组的方式返回

内部函数,不修改全局变量可以访问全局变量!!

内部函数,修改同名全局变量,则python会认为它是一个局部变量!!

七:关于命名

(1)文件名:全小写,可以使用下划线

(2)函数名:小写,小驼峰原则

(3)变量名:全部小写,下划线连接

详细的命名规则参考PEP8

八:几个特殊的函数
    map
    reduce
    filter

# --------------------------------------------------------------------------## 函数的语法及调用# --------------------------------------------------------------------------#def func(func_name, number):        # 函数的定义    """打印输入的任何字符串"""    print(func_name, number)    return 'Done'func('func_1', 'faith')             # 函数的调用# --------------------------------------------------------------------------## 不定长参数函数,封装成元组# --------------------------------------------------------------------------#def func_1(func_name, *number):    """    打印输入的任何字符串    """    print(type(number))    print(func_name, number)    return 'Done'func_1('func_1', 1, 2, 2, 3)def func_2(func_name, number):   #    print(type(number))    print(func_name, number)    return 'Done'func_2('func_2', (1, 2, 2, 3))def func_3(func_name, *number):    print(func_name)    print(number[3])            # 根据元组index中一部分变量    print(number[4])    return 'Done'func_3('func_3', 1, 2, 2, 3, 'aaa', 'abc')# get out question: the number of index isn't known in most case!# --------------------------------------------------------------------------## 不定长参数函数,封装成字典# --------------------------------------------------------------------------#def func_4(func_name, **number):  # 可变参数必须在函数参数的最后    # print(type(number))    print(func_name, number)    return 'Done'func_4('func_4', name='faith')# --------------------------------------------------------------------------## 命名关键字函数# --------------------------------------------------------------------------#def func_5(a, x, c, *, china, uk):    print('func_5:', china, uk)    print(a, x, c)func_5(1, 2, 3, china='bJ', uk='rs')    # 调用时必须加上关键字# func_5(1, 2, 3, 'bJ', 'rs')# --------------------------------------------------------------------------## 函数应用之-递归# --------------------------------------------------------------------------#def my_sum(i):    if i