一 函数名的使用

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()

  1. 内部函数可以直接在函数外部调用么 不行
  2. 调用外部函数后,内部函数可以在函数外部调用吗 不行
  3. 内部函数可以在函数内部调用吗 可以
  4. 内部函数在函数内部调用时,是否有先后顺序 有

定义一个三层嵌套函数,最外层的是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原则

  1. 用来修改当前作用域上一层的[局部变量]
  2. 如果上一层没有,继续向上寻找
  3. 直到再也找不到了,直接报错

用来修改当前作用域上一层的[局部变量]

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函数名的使用以及函数变量的操作的更多相关文章

  1. PHP大小写:函数名和类名不区分,变量名区分

    PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以这里总结一下. 但我不是鼓励大家去用这些规则.推荐大家始终坚持“大小写敏感”,遵循统一的代码规范. 1. 变量名区分大小写 <?p ...

  2. 用trie树实现输入提示功能,输入php函数名,提示php函数

    参照刘汝佳的trie树 结构体 #include "stdio.h" #include "stdlib.h" #include "string.h&q ...

  3. go源码分析(五) 获取函数名和调用者的函数名

    参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string {     ...

  4. 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 ...

  5. Python3基础 函数名.__doc__显示一个函数的单行与多行函数文档

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  6. lua 根据函数名字符串来执行函数

    function myfunction(msg) print("this is msg fun " .. msg); end local fun =_G["myfunct ...

  7. Python基础之 函数名,闭包,和迭代器

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

  8. python基础 (函数名,闭包,和迭代器)

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

  9. python 函数名 、闭包 装饰器 day13

    1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print ...

随机推荐

  1. OO第四单元总结暨OO课程总结

    一.第四单元作业总结 本单元的主要任务是对 Uml 图元素进行管理和查询,测试一开始会输入一个静态图,之后会对图中相关内容进行查询. 第13,14次作业 第14次作业新增内容很少,故与第13次作业放在 ...

  2. PAT A1025 考生排名问题

    题目要求:有n个考场,每个考场有若干个考生,现给出各个考场中考生的准考证号与分数,按照分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及所在的考场排名 #include<cstd ...

  3. Day10_48_Map集合中的常用方法

    Map集合中的常用方法 * 常用方法 - 注意 Map集合中的key是无序不可重复的set集合,如果添加数据时,key值重复了,后面添加的重复数据也是可以添加成功的,但是会覆盖前面相同的数据. 1. ...

  4. python 匿名函数,内置函数

    一 :匿名函数 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使 ...

  5. map的遍历方法 map.entrySet()

    代码: @Test public void TestMap() throws Exception { Map<String, String> map = new HashMap<&g ...

  6. python3使用迭代生成器yield减少内存占用

    技术背景 在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中.其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会 ...

  7. 拿到蚂蚁金服的offer是一种什么体验?3年Java程序员分享面经

    前言:我是一名三年的Java程序员,之前一直是在外包公司工作的.在这个月五号的时候,通过我的学长做内推,有了去蚂蚁金服面试的机会.我是在12号接到的电话面试的,因为蚂蚁金服需要7天的简历评估的.还有就 ...

  8. 将这段美化的css代码

    很多时候如果不是用了很多样式,很难把边框修饰得好看,看了一篇博文,觉得真的挺漂亮,也挺好看. 转载的博文地址 将这段美化的css代码 border:1px solid #96c2f1;backgrou ...

  9. Run-Time Check Failure #0,The value of ESP was not properly saved 错误解决

    调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function c ...

  10. Windows核心编程 第三章 内核对象

    第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介 ...