一 函数名的使用

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. Hadoop完整搭建过程(四):完全分布模式(服务器)

    1 概述 上一篇文章介绍了如何使用虚拟机搭建集群,到了这篇文章就是实战了,使用真实的三台不同服务器进行Hadoop集群的搭建.具体步骤其实与虚拟机的差不多,但是由于安全组以及端口等等一些列的问题,会与 ...

  2. Day16_98_IO_一边读一边写

    一边读一边写 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp ...

  3. Day12_60_多线程的创建和启动(一)

    多线程的创建和启动 * 在java语言中实现多线程的第一种方式, 继承 java.lang.Thread; 之后重写run()方法. * 使用多线程之后,主线程和其他线程是不在同一个栈中的,一个线程对 ...

  4. C++介绍和class的介绍

    课程介绍 程序设计II是程序设计I的延续,继续提高编程能力,并能掌握面向对象(Object Oriented Programming)的程序设计方法.所谓面向对象,指的是将具体的流程变得模块化.这可以 ...

  5. 技术分享|JavaScript的前世今生

    目录 一.什么是JavaScript 二.JavaScript的功能 三.JavaScript可以做什么 四.JavaScript框架 五.HTML,CSS和JavaScript 六.JavaScri ...

  6. php读取目录下的所有文件

    php读取目录下的所有文件 $path = './use'; $result = scanFile($path); function scanFile($path) { global $result; ...

  7. POJ2226 不错的最小顶点覆盖

    题意:        给你一个n * m 的矩阵,上面有" * " 和 " . " ,让你用少的木板吧所有" * "覆盖,木板宽度是1,长度 ...

  8. POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)

    题意:       有n头猪,m个猪圈,每个猪圈都有一定的容量(就是最多能装多少只猪),然后每只猪对每个猪圈的喜好度不同(就是所有猪圈在每个猪心中都有一个排名),然后要求所有的猪都进猪圈,但是要求所有 ...

  9. cmake VTK visual studio 2010

    使用cmake在configure之后,出现了以下错误,导致编译无法进行 The C compiler "cl" is not able to compile a simple t ...

  10. ERROR: Symbol file could not be found 寒江孤钓<<windows 内核安全编程>> 学习笔记

    手动下载了Symbols,设置好了Symbols File Path,串口连接上了以后,出现ERROR: Symbol file could not be found, 并且会一直不停的出现windb ...