015.Python函数名的使用以及函数变量的操作
一 函数名的使用
python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限
1.1 函数名是个特殊的变量,可以当做变量赋值
def func():
print("有志者,事竟成,破釜沉舟,百二秦关终属楚") res = 4+3j
res = func
# res() = func()
# 把func当成变量赋值给res ,此刻res也成为了函数,调用函数需要在res后面加上()
res()
执行
[root@node10 python]# python3 test.py
有志者,事竟成,破釜沉舟,百二秦关终属楚
1.2 函数名可以作为容器类型数据的元素
def func1():
print(11)
def func2():
print(22)
def func3():
print(33) lst = [func1,func2,func3]
print(lst)
# 循环调用列表当中的每一个函数
for i in lst:
i()
执行
[root@node10 python]# python3 test.py
[<function func1 at 0x7f7ceb47ee18>, <function func2 at 0x7f7ceb39e0d0>, <function func3 at 0x7f7ceb39e158>]
11
22
33
1.3 函数名可以作为函数的参数
def func1(func):
# 函数的调用处
res = func()
print(res) # 函数的定义处
def func2():
return 123 func1(func2)
执行
[root@node10 python]# python3 test.py
123
1.4 函数名可作为函数的返回值
def func1(func2):
# 返回到函数的调用处
return func2
def func2():
return 456 # 参数func2
res = func1(func2)
print(res)
print(res())
执行
[root@node10 python]# python3 test.py
<function func2 at 0x7fd007e460d0>
456
二 全局变量和局部变量
- 局部变量: 定义在函数里面的变量就是局部变量
- 全局变量: 定义在函数外面的变量或者在函数内部用global关键字声明的变量是全局变量
- 局部变量的作用域: 只限定在函数内部
- 全局变量的作用域: 横跨整个文件
2.1 局部变量的获取和修改
def func(a):
a += 5 # 修改局部变量
print(a) # 获取局部变量 func(1)
执行
[root@node10 python]# python3 test.py
6
2.2 全局变量的获取和修改
b = 10
print(b) # (2)在函数内部可以直接访问到全局变量
def func2():
# 在函数内部可以直接访问全局变量,但是不能直接修改全局变量
print(b) # 获取全局变量
# b+=2 # 修改全局变量
# print(b)
func2()
在函数内部可以通过global关键字修饰,进而修改全局变量
注意点:务必在函数这个代码块的开头用global关键字声明修饰
c = 12
def func3():
global c
c += 2
print(c) func3()
执行
[root@node10 python]# python3 test.py
14
2.3 在函数内部直接声明一个全局变量
def func4():
global d
d = 90
d+=10
print(d)
func4()
print(d)
执行
[root@node10 python]# python3 test.py
100
100
- global 关键字如果在函数外面有该全局变量,用在函数中是修改全局变量
- global 关键字如果在函数外面没有该全局变量,用在函数中是定义全局变量
三 函数的嵌套
- python中允许函数嵌套,嵌套在外层的是外函数,嵌套在里层的是内函数
def func1():
a = 10
def func2():
print(a)
func2()
func1()
执行
[root@node10 python]# python3 test.py
10
func2()
- 内部函数可以直接在函数外部调用么 不行
- 调用外部函数后,内部函数可以在函数外部调用吗 不行
- 内部函数可以在函数内部调用吗 可以
- 内部函数在函数内部调用时,是否有先后顺序 有
定义一个三层嵌套函数,最外层的是outer 第二层是inner ,第三层是smaller,调用smaller
def outer():
a = 90
def inner():
# a = 91
def smaller():
print(a)
print(id)
smaller() inner() outer()
执行
[root@node10 python]# python3 test.py
90
<built-in function id>
找寻变量的调用顺序采用LEGB原则(即就近原则)
B —— Builtin(Python);Python内置模块的命名空间 (内建作用域)
G —— Global(module); 函数外部所在的命名空间 (全局作用域)
E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
L —— Local(function);当前函数内的作用域 (局部作用域)
依据就近原则,从下往上 从里向外 依次寻找
del删除
a01 = 10
def func():
a01 = 20
print(a01)
func()
执行
[root@node10 python]# python3 test.py
20
使用del
a01 = 10
def func():
a01 = 20
del a01
# 除非不定义,一旦定义过一次局部变量,删除后,会默认认为找不到,报错
print(a01)
func()
执行报错

四 nonlocal函数
nonlocal 专门用来修饰[局部变量] 符合LEGB原则
- 用来修改当前作用域上一层的[局部变量]
- 如果上一层没有,继续向上寻找
- 直到再也找不到了,直接报错
用来修改当前作用域上一层的[局部变量]
def outer():
a = 1
def inner():
nonlocal a
a += 2
print(a)
inner()
outer()
执行
[root@node10 python]# python3 test.py
3
如果上一层没有,继续向上寻找
def outer():
a = 20
def inner():
a = 10
def smaller():
nonlocal a
a+=2
print(a) #12
smaller()
print(a) #12
inner()
print(a) #20
outer()
执行
[root@node10 python]# python3 test.py
12
12
20
直到再也找不到了,直接报错
a = 80 # 全局变量 nonlocal不能修饰
def outer():
# a = 10
def inner():
def smaller():
nonlocal a
a+=2
print(a) #12
smaller()
inner()
outer()
执行

015.Python函数名的使用以及函数变量的操作的更多相关文章
- PHP大小写:函数名和类名不区分,变量名区分
PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以这里总结一下. 但我不是鼓励大家去用这些规则.推荐大家始终坚持“大小写敏感”,遵循统一的代码规范. 1. 变量名区分大小写 <?p ...
- 用trie树实现输入提示功能,输入php函数名,提示php函数
参照刘汝佳的trie树 结构体 #include "stdio.h" #include "stdlib.h" #include "string.h&q ...
- go源码分析(五) 获取函数名和调用者的函数名
参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string { ...
- python 使用函数名的字符串调用函数(4种方法)_black-heart的专栏-CSDN博客 https://blog.csdn.net/mrqingyu/article/details/84403924
funcs = ['fetch_data_' + i for i in ( 'activities', 'banners', 'server_list')]# from operator import ...
- Python3基础 函数名.__doc__显示一个函数的单行与多行函数文档
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- lua 根据函数名字符串来执行函数
function myfunction(msg) print("this is msg fun " .. msg); end local fun =_G["myfunct ...
- Python基础之 函数名,闭包,和迭代器
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
- python基础 (函数名,闭包,和迭代器)
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
- python 函数名 、闭包 装饰器 day13
1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print ...
随机推荐
- 「HTML+CSS」--自定义加载动画【016】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作win2008r2-19
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作win2008r2-19 欢迎加QQ群:1026880196 进行交流学习 制作OpenSta ...
- linux-shell 判断当前用户是否是root用户
环境变量UID中保存的是用户ID. root用户的UID是0. #! /bin/bash if [ $UID -ne 0 ]; then echo Non root user. Please run ...
- C语言-内存函数的实现(一)之memcpy
C语言中的内存函数有如下这些 memcpy memmove memcmp memset 下面看看memcpy函数 memcpy 我们想想,之前有那个字符串拷贝的函数,即strcpy函数.都有拷贝的函数 ...
- (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )
1.概述 在我们在学习InnoDB锁知识点之前,我觉得有必要让大家了解它的背景知识,因为这样才能让我们更系统地学习好它.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION ...
- hdu1960 最小路径覆盖
题意: 给你明天的出租车订单,订单中包含每个人的起点和终点坐标,还有时间,如果一辆出租车想接一个乘客必须在每个订单前1分钟到达,也就是小于等于time-1,问你完成所有订单要最少多少量出租 ...
- hdu3594 强连通 tarjan
题意: 判断是不是强连通图 ,同时每一条边必须只能在一个环里 思路:之前我的强连通用的全是双深搜,结果题目的第二个要求很难判断,一开始写了三个深搜加上并查集,结果越写越乱,其实就是在判断一个边是否只在 ...
- 缓冲区溢出分析第06课:W32Dasm缓冲区溢出分析
漏洞报告分析 学习过破解的朋友一定听说过W32Dasm这款逆向分析工具.它是一个静态反汇编工具,在IDA Pro流行之前,是破解界人士必然要学会使用的工具之一,它也被比作破解界的"屠龙刀&q ...
- Python中Scapy网络嗅探模块的使用
目录 Scapy scapy的安装和使用 发包 发包和收包 抓包 将抓取到的数据包保存 查看抓取到的数据包 格式化输出 过滤抓包 Scapy scapy是python中一个可用于网络嗅探的非常强大的第 ...
- Windows认证体系解读
目录 Windows认证方式 Windows本地认证 NTLM认证方式(工作组环境中) wiresharek抓包NTLMv2,使用Hashcat爆破 NTLM认证方式(域环境中) Kerberos认证 ...