Python函数学习——作用域与嵌套函数
全局与局部变量
- 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
- 全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
- 当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用;在其它地方全局变量起作用。
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函数学习——作用域与嵌套函数的更多相关文章
- python语法学习第五天--函数(2)
命名空间: 命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空间是独立的,没有任何关系 ...
- python函数基础:嵌套函数、作用域、匿名函数、高阶函数、递归函数
嵌套函数: 1. 函数内部可以再定义函数 2. 函数只有被调用之后才会执行 看如下代码: age = 18 def func1(): age = 22 print(age) def func2(): ...
- python之函数名称空间,作用域,嵌套函数
目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...
- Day3 Python基础学习——文件操作、函数
一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...
- python 函数的作用域,闭包函数的用法
一.三元表达式 if条件成功的值 if 条件 else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...
- PYTHON 100days学习笔记006:函数和模块的使用
目录 Day006:函数和模块的使用 1.函数的作用 2.定义函数 2.1 语法 2.2 实例 2.3 函数的调用 4.函数的参数 4.1 必须参数 4.2 关键字参数 4.3 默认参数 4.4 不定 ...
- Python基础学习——文件操作、函数
一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...
- python基础学习(六)函数基础
函数的基本使用 函数的定义 def 函数名(): 函数封装的代码 …… def 是英文 define 的缩写 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用 函数名称 的命名应该 符合 ...
- python视频学习笔记4(函数)
函数中return和print的区别,没有return会默认返回None值 函数定义:所谓**函数**,就是把 **具有独立功能的代码块** 组织为一个小模块,在需要的时候 **调用** 1.函数的步 ...
随机推荐
- Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS
[Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS] 1.通过 VPOS / WPOS 语义获取. VPOS 是 HLSL 中 对 屏幕 坐标 的 语义, 而 WPOS 是 ...
- java集合框架(1) hashMap 简单使用以及深度分析(转)
java.util 类 HashMap<K,V>java.lang.Object java.util.AbstractMap<K,V> java.util.Hash ...
- Yii 框架不同逻辑处理方法统一事务处理
1.定义事务处理接口 <?php namespace frontend\business\SaveRecordByransactions; /** * Interface ISaveForTra ...
- python动态模块导入
首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py 官方推荐: import importlib aa = importlib.import_module('lib.aa') c = ...
- [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)
This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...
- cookie、sesstion、strorage
1. cookie 第一:每个特定的域名下最多生成20个cookie (数量上) <IE6: 20 | >ie7:50 | firefox: 50 | IE ...
- ES6自我总结笔记(阮一峰ES6入门)
[let和const命令] 1.var的作用域是函数体内,不是块级作用域 2.let是更完美的var,let的变量的作用是块级作用域 3.let声明的全局变量不是全局对象属性,不可以通过window. ...
- windbg 经典死锁调试
代码 // Deadlock_Debug.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "windows.h& ...
- xbeePRO900HP的几个关键参数
xbee PRO 900HP又叫xbee PRO S3B,在模块的正面有S3B的字样: 因为用到这个模块的,多用的是digimesh组网固件,所以以下参数修改只针对digimesh的修改:市面上的xb ...
- s11 Docker+DevOps实战--过程和工具
开发人员本地提交代码,本地使用容器模拟生产环境测试,测试通过提交到git master 分支,就会触发pipeline执行集成构建.集成工具: gitlab-vi,travis,或Jenkins.自动 ...