函数的形式:

def name(param1, param2, ..., paramN):statementsreturn/yield value # optional
  • 和其他需要编译的语言(比如 C 语言)不一样的是,def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def 语句才会创建一个新的函数对象,并赋予其名字。
  • Python 是 dynamically typed ,对函数参数来说,可以接受任何数据类型,这种行为在编程语言中称为多态。所以在函数里必要时要做类型检查,否则可能会出现例如字符串与整形相加出异常的情况。

函数的嵌套:

例:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def f1():print('hello')def f2():print('world')f2()
f1()
'hello'
'world'

嵌套函数的作用

保证内部函数的隐私

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def connect_DB():def get_DB_configuration():...return host, username, passwordconn = connector.connect(get_DB_configuration())return conn

在connect_DB函数外部,并不能直接访问内部函数get_DB_configuration,提高了程序的安全性

如果在需要输入检查不是很快,还会耗费一定资源时,可以使用函数嵌套提高运行效率。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def factorial(input):# validation checkif 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 1return input * inner_factorial(input-1)return inner_factorial(input)
print(factorial(5))

函数作用域

1.global

在Python中,我们不能在函数内部随意改变全局变量的值,会报local variable ‘VALUE’ referenced before assignment。

下例通过global声明,告诉解释器VALUE是全局变量,不是局部变量,也不是全新变量

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
VALUE = 10
LIST = ['a','b']
print(id(LIST)) #2490616668744
def validation_check(value):global VALUEVALUE += 3 #如果注释掉global VALUE,会报local variable 'VALUE' referenced before assignmentLIST[0] = 10 #可变类型无需global可以使用全局变量?print(id(LIST)) #2490616668744print(f'in the function VALUE: {LIST}') #in the function VALUE: [10, 'b']print(f'in the function VALUE: {VALUE}') #in the function VALUE: 13validation_check(1)
print(f'out of function {LIST}') #out of function [10, 'b']
print(f'out of function {VALUE}') #out of function 13
#a: 13
#b: 13

2.nonlocal

对于嵌套函数,nonlocal 声明变量是外部函数中的变量

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def outer():x = "local"def inner():nonlocal x # nonlocal 关键字表示这里的 x 就是外部函数 outer 定义的变量 xx = 'nonlocal'print("inner:", x)inner()print("outer:", x)
outer()
# inner :nonlocal
# outer :nonlocal

当内部变量与外部变量同名时,内部变量会覆盖外部变量

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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 ** exponentreturn 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

Python基础教程:自定义函数相关推荐

  1. python基础教程:函数装饰器详解

    谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了一个函数fu ...

  2. Python基础教程:函数名本质

    函数名的本质 函数名实质上就是函数的内存地址 def wrapper():passprint(wrapper) 1.引用是什么? 当我们定义a=1的时候,系统会开辟一块内存空间来保存1,然后用a变量名 ...

  3. Python基础教程:函数及其参数

    1.函数 定义一个函数,就好像是给一段代码取个名字. def 是关键字 表示定义一个函数 然后是函数的 + 名字 (): 缩进的代码表示这个函数名字代表的具体动作是什么,称之为 函数体. def wo ...

  4. Python基础教程:函数的可变参数

    在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c--,请计算a2 + b2 + c2 + --. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...

  5. python基础教程:函数作用域

    在python中,一个函数就是一个作用域 name = 'xiaoming'def change_name():name = 'sthu'print('在change_name里的name:',nam ...

  6. Python基础教程:函数的定义

    1,函数定义: def 函数名称([参数1,参数2,参数3......]):执行语句 2,实例一(不带参数和没返回值): ''' Python大型免费公开课,适合初学者入门 加QQ群:57981733 ...

  7. 【爆肝更新】Python基础教程:第五章_Python函数

    原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...

  8. python基础教程博客_python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

  9. python基础教程攻略-python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

最新文章

  1. 【原】东拼西凑PBR(1):PBR基础
  2. c语言求成绩标准差,C程序计算标准偏差
  3. 组合枚举——妖梦拼木棒(洛谷 P3799)
  4. Go语言逆向技术:常量字符串
  5. 没有为此文件配置应用程序上下文_如何在macOS中管理文件关联?
  6. Tensorflow2.0数据类型
  7. java中的POJO、PO、VO分别是什么?
  8. 删除的时候提示“该项目不在C:\User\桌面 中
  9. English Learning from research paper
  10. 抖音短视频去水印网址 视频消重后,火山还是鉴别出来了
  11. 通过AT指令将air202 接入阿里云
  12. 浅谈DNS协议,DNS协议的作用以及DNS的查询方式,使用DNS做负载均衡
  13. 免费企业网站模板_学校网站模板_政府网站模板源码下载
  14. 利用Promise彻底解决微信小程序云函数因运行时间过长返回result,underfined为空的方法
  15. 如何使用FreeTime将Android或Fire Tablet变成适合儿童使用的设备
  16. (1)在ensp上面进行静态路由和默认路由测试(直接上手)
  17. 2022讯飞——糖尿病遗传风险检测挑战赛解决方案
  18. Shell中declare -A的用法?
  19. 幼儿抽象逻辑思维举例_幼教科目二丨幼儿认知的发展(思维)
  20. 数据分享|人口空间分布

热门文章

  1. 7 天玩转 ASP.NET MVC — 第 3 天
  2. Cacti 每日导出图形及流量报表 [未完成]
  3. 分布学在flash当中的应用体现
  4. 找找Amazon的A9算法更新和变化的蛛丝马迹!
  5. OA工作流程怎么梳理
  6. Material Master_物料类型后台配置
  7. 会计记忆总结之九:会计档案
  8. SAP标准成本核算重要环节详解
  9. 多语种下的卡萨帝故事
  10. 三组关键词,拆解2021年赤子城的中期业绩报告