一 函数名的使用

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. 【Java】流、IO(初步)

    (这部分比较抽象且写的不是很好,可能还要再编辑) [概述] 流:流是一系列数据,包括输入流和输出流.你可以想象成黑客帝国的"代码雨",只要我们输入指令,这些数据就像水一样流进流出了 ...

  2. 【CTF】2019湖湘杯 miscmisc writeup

    题目来源:2019湖湘杯 题目链接:https://adworld.xctf.org.cn/task/answer?type=misc&number=1&grade=1&id= ...

  3. 【笔记】《Redis设计与实现》chapter14 服务器

    14.1 命令请求的执行过程 读取命令请求 命令执行器(1):查找命令实现 在命令表(command table)中查找参数所指定的命令,并将找到的命令保存到客户端状态的cmd属性里面 命令执行器(2 ...

  4. Scala进阶(1)—— 反射 object 和 class

    1. Scala 的 反射 关于 Scala 反射的具体内容,可以参考官方文档:https://docs.scala-lang.org/overviews/reflection/overview.ht ...

  5. Day16_95_IO_循环读取文件字节流read()方法(四)

    循环读取文件字节流read()方法(四) 使用 int read(byte[] bytes) 循环读取字节流数据 import java.io.FileInputStream; import java ...

  6. React函数式组件的性能优化

    优化思路 主要优化的方向有2个: 减少重新 render 的次数.因为在 React 里最重(花时间最长)的一块就是 reconction(简单的可以理解为 diff),如果不 render,就不会 ...

  7. java面试一日一题:mysql中的自增主键

    问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...

  8. EasyCode Entity 实体类模板 IDEA

    自己修改了一份EasyCode的实体类模板,防止日后找不到在这里存一下 修改了如下内容: 取消生成GetSet方法,改用Lombok 修改默认命名规则,改为[表名Entity.java] 取消了实现序 ...

  9. Dedecms自定义表单后台列表展现方式样式更改

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. hdu4772 水模拟

    题意:       给你两个矩阵,问你两个矩阵的最大相同元素个数(位置也要求相同),矩阵可以90旋转多次. 思路:       水题,直接模拟就行了,方法很多,可以直接写坐标关系,或者一层一层处理,就 ...