Python基础:自定义函数
程序员文章站
2022-06-17 09:00:52
函数的形式: 和其他需要编译的语言(比如 C 语言)不一样的是,def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def 语句才会创建一个新的函数对象,并赋予其名字。 Python 是 dynamically typed ,对函数参数来说,可以接受任何数据类型,这种行为 ......
函数的形式:
def name(param1, param2, ..., paramn): statements return/yield value # optional
- 和其他需要编译的语言(比如 c 语言)不一样的是,def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def 语句才会创建一个新的函数对象,并赋予其名字。
- python 是 dynamically typed ,对函数参数来说,可以接受任何数据类型,这种行为在编程语言中称为多态。所以在函数里必要时要做类型检查,否则可能会出现例如字符串与整形相加出异常的情况。
函数的嵌套:
例:
def f1(): print('hello') def f2(): print('world') f2() f1() 'hello' 'world'
嵌套函数的作用
-
保证内部函数的隐私
def connect_db(): def get_db_configuration(): ... return host, username, password conn = connector.connect(get_db_configuration()) return conn
在connect_db函数外部,并不能直接访问内部函数get_db_configuration,提高了程序的安全性
-
如果在需要输入检查不是很快,还会耗费一定资源时,可以使用函数嵌套提高运行效率。
def factorial(input): # validation check if not isinstance(input, int): raise exception('input must be an integer.') if input < 0: raise exception('input must be greater or equal to 0' ) ... def inner_factorial(input): if input <= 1: return 1 return input * inner_factorial(input-1) return inner_factorial(input) print(factorial(5))
函数作用域
1.global
在python中,我们不能在函数内部随意改变全局变量的值,会报local variable 'value' referenced before assignment。
下例通过global声明,告诉解释器value是全局变量,不是局部变量,也不是全新变量
value = 10 def validation_check(value): global value value += 3 #如果注释掉global value,会报local variable 'value' referenced before assignment print('a:',value) validation_check(1) print('b:',value) #a: 13 #b: 13
2.nonlocal
对于嵌套函数,nonlocal 声明变量是外部函数中的变量
def outer(): x = "local" def inner(): nonlocal x # nonlocal 关键字表示这里的 x 就是外部函数 outer 定义的变量 x x = 'nonlocal' print("inner:", x) inner() print("outer:", x) outer() # inner :nonlocal # outer :nonlocal
当内部变量与外部变量同名时,内部变量会覆盖外部变量
def outer(): x = "local" def inner(): x = 'nonlocal' # 这里的 x 是 inner 这个函数的局部变量 print("inner:", x) inner() print("outer:", x) outer() # 输出 # inner: nonlocal # outer: local
闭包
- 内部函数返回一个函数
- 外部函数nth_power()中的exponent参数在执行完nth_power()后仍然会被内部函数exponent_of记住
def nth_power(exponent): def exponent_of(base): return base ** exponent return exponent_of # 返回值是 exponent_of 函数 square = nth_power(2) # 计算一个数的平方 cube = nth_power(3) # 计算一个数的立方 # square # # 输出 # <function __main__.nth_power.<locals>.exponent(base)> # cube # # 输出 # <function __main__.nth_power.<locals>.exponent(base)> # print(square(2)) # 计算 2 的平方 # print(cube(2)) # 计算 2 的立方 # # 输出 # 4 # 2^2 # 8 # 2^3
赞 (0)
打赏
微信扫一扫
相关文章:
-
-
小伙伴们大家好~o( ̄▽ ̄)ブ,沉寂了这么久我又出来啦,这次先不翻译优质的文章了,这次我们回到Python中的机器学习,看一下Sklearn中的数据... [阅读全文]
-
Ai怎么绘制奥运金牌的徽章图标?很喜欢金牌的图标,想自己绘制一个属于自己的金牌,该怎么绘制呢?下面我们就来看看ai绘制奥运金牌的详细教程,需要的朋友可以参考下.... [阅读全文]
-
这篇教程是向脚本之家的朋友分享AI蒙版和钢笔绘制漂亮的水晶图标字样方法,教程绘制出来的图标非常漂亮,主要是运用了蒙版和钢笔,推荐过来,来看看吧... 16-06... [阅读全文]
-
AI组合的图形怎么拆分?ai绘制图形的时候,想要让图形重合的位置拆分下来,该怎么办呢?下面我们就来看看AI拼合透明度的使用方法,需要的朋友可以参考下... 16... [阅读全文]
-
一、tcp协议 1.1 基本知识 1. 特点: 可靠,慢,全双工通信 建立连接时:三次握手 断开连接时:四次挥手 在建立起连接之后 发送的每一条信息... [阅读全文]
-
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论