全局与局部变量

  • 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
  • 全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
  • 当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用;在其它地方全局变量起作用。
name = "Alex Li"   # 全局变量

def change_name(name):
print("before change:",name) # 函数内部变量从内向外找,如果内部不存在,会找上一层
# 输出
# before change: Alex Li
name = "金角大王,一个有Tesla的男人" #局部变量
print("after change", name)
# 输出
# after change 金角大王,一个有Tesla的男人 change_name(name) print("在外面看看name改了么?",name) # 默认局部变量不能修改全局变量的值
# 输出
# 在外面看看name改了么? Alex Li

不用传name 值到函数里,也可以在函数里调用外面的变量

name = "Alex Li"

def change_name():
name = "金角大王,一个有Tesla的男人"
print("after change", name)
# 输出
# after change 金角大王,一个有Tesla的男人 change_name() print("在外面看看name改了么?", name )
# 输出
# 在外面看看name改了么? Alex Li

作用域

Python中函数就是一个作用域,局部变量放置在其作用域中。

如何在函数里修改全局变量?global

name = "Alex Li"
def change_name():
global name # 声明全局变量
name = "Alex 又名 金角大王,路飞学城讲师"
print("after change", name)
# 输出
# after change Alex 又名 金角大王,路飞学城讲师 change_name() print("在外面看看name改了么?", name) """
global name的作用就是要在函数里声明全局变量name ,意味着最上面的name = "Alex Li"即使不写,程序最后面的print也可以打印name
"""
在实践中global一般情况下最好不要使用,在多人协作时容易产生错误

嵌套函数

在函数里面还可以定义函数,可以嵌套多层,执行需要被调用

name = "Alex"
def change_name():
name = "Alex2" def change_name2():
name = "Alex3"
print("第3层打印", name) change_name2() # 调用内层函数
# 输出
# 第3层打印 Alex3
print("第2层打印", name)
# 输出
# 第2层打印 Alex2 change_name()
print("最外层打印", name)
# 输出
# 最外层打印 Alex

嵌套函数举例1

嵌套函数举例2

嵌套函数举例3

嵌套函数举例4

嵌套函数举例5

嵌套函数举例6

高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

变量可以指向函数

以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码

>>> abs(-1)
1
但是,如果只写abs呢?
>>> abs
<built-in function abs>

如果把函数本身赋值给变量呢?

>>> f = abs
>>> f
<built-in function abs>

总结:函数本身也可以赋值给变量,即:变量可以指向函数

验证:

f = abs
print(f(-10))
# 输出10

传入函数

既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

一个最简单的高阶函数:

def add(x, y, f):  # 高阶函数
return f(x) + f(y) """
当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs,根据函数定义,我们可以推导计算过程为:
x = -5
y = 6
f = abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 11
"""
print(add(-5, 6, abs))
# 输出11


Python函数学习——作用域与嵌套函数的更多相关文章

  1. python语法学习第五天--函数(2)

    命名空间: 命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空间是独立的,没有任何关系 ...

  2. python函数基础:嵌套函数、作用域、匿名函数、高阶函数、递归函数

    嵌套函数: 1. 函数内部可以再定义函数 2. 函数只有被调用之后才会执行 看如下代码: age = 18 def func1(): age = 22 print(age) def func2(): ...

  3. python之函数名称空间,作用域,嵌套函数

    目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...

  4. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

  5. python 函数的作用域,闭包函数的用法

    一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...

  6. PYTHON 100days学习笔记006:函数和模块的使用

    目录 Day006:函数和模块的使用 1.函数的作用 2.定义函数 2.1 语法 2.2 实例 2.3 函数的调用 4.函数的参数 4.1 必须参数 4.2 关键字参数 4.3 默认参数 4.4 不定 ...

  7. Python基础学习——文件操作、函数

    一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...

  8. python基础学习(六)函数基础

    函数的基本使用 函数的定义 def 函数名(): 函数封装的代码 …… def 是英文 define 的缩写 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用 函数名称 的命名应该 符合 ...

  9. python视频学习笔记4(函数)

    函数中return和print的区别,没有return会默认返回None值 函数定义:所谓**函数**,就是把 **具有独立功能的代码块** 组织为一个小模块,在需要的时候 **调用** 1.函数的步 ...

随机推荐

  1. Add Inline Actions

    [Add Inline Actions] 1.为了使用 inline action,需要给 eosio.code 账号添加active权限. To use the 'activeauthority i ...

  2. Mark,20180127,技术博客之路开启!

    不怎么会说话,自己本身少说话的撸码loner,少说多做.毕业从事手游一年多,之前主要从事Cocos2dx,刚转投Unity不到一个月,后面主要总结下自己在这两方面开发过程中的一些历程,希望自己能有所积 ...

  3. 20175314 《Java程序设计》第二周学习总结

    20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用 ...

  4. NSLog无法使用

    iOS/macos 中 #import<foundation/foundation.h> nslog不能用 如果项目中包含c/c++程序代码 将其后缀修改成.m .mm 将项目的build ...

  5. 用rekit创建react项目

    第一步  先进入github.com 然后搜索rekit 往下滑 1 . 先全局安装 npm install -g rekit 2 . 进入自己想要创建项目文件的目录输入 rekit create / ...

  6. Python基础-python数据类型(四)

    python数据类型 在python中,变量就是变量,它没有类型,我们所说的类型是变量所指的内存中对象的类型. python中的数据类型: 1.数字 python中没有专门定义常量的方式,通常使用大写 ...

  7. 298. Binary Tree Longest Consecutive Sequence最长连续序列

    [抄题]: Given a binary tree, find the length of the longest consecutive sequence path. The path refers ...

  8. rsyslog和logrotate

    简介 rsyslog 是一个 syslogd 的多线程增强版. 现在Fedora和Ubuntu, rhel6默认的日志系统都是rsyslog了 rsyslog负责写入日志, logrotate负责备份 ...

  9. UI 设计的整个工作流程是怎样的?

    作为一个专业UI设计师,不仅仅要了解整个产品在UI界面设计,交互设计中的工作流程,更需要了解整个产品从需求提出到产品上线的整个工作流程. 以下是互联网产品个部门的工作分配及流程: 从图中可以看到,一个 ...

  10. 13. The Impact of New Technology on Business 新科技对商务的影响

    13. The Impact of New Technology on Business 新科技对商务的影响 (1) New technology links the world as never b ...