视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python中函数部分内容的解析
2020-11-27 14:21:04 责编:小采
文档


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

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

一:语法

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

二:常用函数的类型

(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 < 0:
 raise ValueError # 抛出错误
 elif i <= 1:
 return i
 else:
 return i + my_sum(i - 1)


print(my_sum(1.4))

# --------------------------------------------------------------------------#
# 传递不可变对象实例
# --------------------------------------------------------------------------#


def change_int(a):
 a = 10


b = 2
change_int(b)
print(b) # 结果是2
# --------------------------------------------------------------------------#
# 传递可变对象实例
# --------------------------------------------------------------------------#


def change_me(mylist):
 mylist.append([1, 2, 3, 4])
 print("函数内取值: ", mylist)
 return


myList = [10, 20, 30]
change_me(myList)
print("函数外取值: ", myList)

# --------------------------------------------------------------------------#
# 函数内修改全局变量的值
# --------------------------------------------------------------------------#

money = 200 # 模块里面的全局变量


def add_money():
 global money
 money = money + 1
 return money


print("修改后的值money = ", add_money())


# --------------------------------------------------------------------------#
# 匿名函数
# --------------------------------------------------------------------------#
sum_1 = lambda arg1, arg2: arg1 + arg2

# 调用sum函数
print("相加后的值为 : ", sum_1(10, 20))
print("相加后的值为 : ", sum_1(20, 20))

# 单独编译一个文件时候
输出结果 if __name__ == "__main__": pass

下载本文
显示全文
专题