【 第八节 函数作用域】
拆包
列表和元组的拆包:会拆成位置参数
def marry(male,*female):print(male)print(female)# marry("老李","小星星")#拆包
# couple =("老李","小星星")
# couple = ["老李","小星星"]
# marry(couple)
# 函数定义当中*args 表示不定长的位置参数
# 这个叫拆包 解包
# 在调用的时候,把一个列表或者元素变量传入函数,在前面加*,就可以变成多个值
couple = ["老李","小星星","月亮"]
marry(*couple) #变成 marry("老李","小星星")
字典的拆包:会拆成关键字参数
def marry(male,female):print(male)print(female)
couple = ["小李","小刘"]
marry(*couple)couple ={"male":"小李","female":"小刘"}
marry(**couple)
结果
小李
小刘
小李
小刘
拆包要和不定长参数分清楚:不定长参数是函数定义的时候
拆包是调用方。
函数的相互调用
def eat(food):print(f"这个人正在猛吃 {food}")def get_offer(name, money, food=None):"""某人获得 offer,name: 拿到 offer 的人money: 月薪food: 喜欢吃的食物"""print(f"{name}获得了一个 {money}K 的 offer")# 吃最喜欢吃的食物eat(food)# 我们在 get_offer 函数当中调用了另外的一个函数 eat
get_offer("明亮", 20)
get_offer("teddy",30,"辣条")
TODO: python 如何运行代码:
第一次执行时:从上到下读取顶格写的代码,缩进的代码是不会被执行的
函数调用是去执行函数体内部的逻辑
def get_offer(name, money, food=None):"""某人获得 offer,name: 拿到 offer 的人money: 月薪food: 喜欢吃的食物"""print(f"{name}获得了一个 {money}K 的 offer")# 吃最喜欢吃的食物eat(food)def eat(food):print(f"这个人正在猛吃 {food}")# 我们在 get_offer 函数当中调用了另外的一个函数 eat
get_offer("明亮", 20)
# get_offer("teddy", 30, "辣条")
get_offer("teddy",30,"辣条")
调试技巧
打断点
Step over F8 单步调试
Step into mycode 进入自己写的函数的内部
Step into 进入函数的内部
函数的相互调用
1、函数调用的顺序
2、函数的相互调用
不要两个函数互相调用,如下的例子构成死循环
def get_offer(name, money, food=None):print(f"{name}获得了一个{money}K 的 offer")eat(food)def eat(food):print(f"这个人正在猛吃 {food}")get_offer("yuz",100)eat("辣条")
尽量避免调用自己
def eat(food):print(f"这个人正在猛吃 {food}")eat(food)eat("辣条")
函数的作用域
#全局作用域def add(a,b):#局部作用域c = a+breturn c#不能用的
#局部变量不能在全局作用域获取
print(c)
def add(a,b):#局部作用域c = a+breturn cc = add(5,6)
print(c)
函数内部局部作用域可以用全局变量吗? —可以
c = 6def minus(a,b):d = a+bprint(d-c)return d-c
外面是不能修改函数内部的变量
函数内部能不能修改全局变量,可以。但是一定要加上一个global c ,声明我是个全局变量
c = 4
def add(a,b):global cc = c +3return c +a+ bprint(add(1,2))
print(c)
内置函数
max 最大值
可以传多个参数
max_num = max(4,9,7)
print(max_num)
可以传列表
max_num = max([4,9,7])
print(max_num)
sum 求和
sum_num = sum([4,9,7])
print(sum_num)
eval
表示你可以去掉一个字符串的引号,变成python可以执行的代码
m_str = "6>7"
print(m_str)
print(eval(m_str))
结果
6>7
False
m_str = '{"username":"yuz","age":18}'
print(m_str)
print(eval(m_str))
print(type(m_str))
print(type(eval(m_str)))
{“username”:“yuz”,“age”:18}
{‘username’: ‘yuz’, ‘age’: 18}
<class ‘str’>
<class ‘dict’>
filter 过滤
li = [2,3,4,5,6,7]
def get_odd(value):if value %2 ==0:return Truereturn Falseres = filter(get_odd,li)
print(list(res))
[2, 4, 6]
map
li = [2,3,4,5,6,7]
#
def square(value):return value **2
res = map(square,li)print(list(res))
[4, 9, 16, 25, 36, 49]
zip
li_i = ["yuz","shanshan","yingying"]
li_2 = [43,11,13]
print(list(zip(li_i,li_2)))
[(‘yuz’, 43), (‘shanshan’, 11), (‘yingying’, 13)]
li_i = ["yuz","shanshan","yingying"]
li_2 = [43,11,13]
a = zip(li_i,li_2)
print(dict(a))
{‘yuz’: 43, ‘shanshan’: 11, ‘yingying’: 13}
append
append 这个函数没有返回值
li = [1,2,3]
res = li.append(6)
print(res)
None
remove
remove 没有返回值
li = [1,2,3]
res = li.remove(2)
print(res)
None
pop
pop 有返回值,返回值是被删除的元素
li = [1,2,3]
res = li.pop(0)
print(res)
1
定义函数的时候,return决定有没有返回值
TODO:只要你调用了函数,你用参数去接收,这个参数的值是由谁决定的? 是由函数定义的时候 reutrn决定的
def run(a,b):return a-bc = run(3,4)
print(c)
-1
def run(a,b):a-bc = run(3,4)
print(c)
None
【 第八节 函数作用域】相关推荐
- python中函数的作用域_Python中的函数作用域
在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...
- 变量作用域函数作用域
一. 变量作用域 1)全局变量 在全局环境下声明的变量被视为全局变量. 在没有使用var进行声明的时候,变量就被定义为全局变量.在ES5的严格模式下,如果变量没有使用var来声明是会报错的. 2)局部 ...
- javascript函数作用域与闭包
8.8. 函数作用域与闭包 如第四章所述,JavaScript函数的函数体在局部作用域中执行,局部作用域不同于全局作用域.本章将解释这些内容和相关的作用域问题,包括闭包.[*] [*] ...
- 前端JS: 通过代码-看函数作用域this对象
函数中的this对象,指向的是调用该函数的对象:谁调用它,它的作用域中的this就指向谁: 每一个具体的问题,都值得思考这个细节点: 1.以下输出结果是: var obj={name:'test',o ...
- 函数作用域的静态变量
2019独角兽企业重金招聘Python工程师标准>>> 下面这段话来自百度百科: 静态局部变量属于静态存储方式,它具有以下特点: (1) 静态局部变量在函数内定义,但不像自动 ...
- python十五:函数作用域-函数即变量
# 函数作用域 def liubei():name = "刘备"print(name)def guanyu():name = "关羽"def zhangfei( ...
- 浅谈JavaScript 函数作用域当中的“提升”现象
在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的. 例如 : message = "hello JavaScript ! " ...
- javascript中函数作用域和声明提前
javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域. 函数作用域:变量在声明它们的 ...
- 函数作用域,闭包,数据类型的题目
第一题:函数作用域和闭包 var a = 9 function fn(){a = 0return function (b){return b+a++} } var f = fn() console.l ...
最新文章
- mysql字段名与关键字冲突(near to:syntax error)
- Java CAS AtomicInteger使用
- Redis中的发布与订阅的概念与以命令行的方式实现发布订阅举例
- typeset的常见用法
- Computer Vision的尴尬
- IDEA调试技巧之条件断点
- json yeid_如何控制Scrapy yield的顺序
- Coursera机器学习week11 单元测试
- php 删除前后空格,php怎么去除前面空格
- React中插入视频(video-react),自动播放
- 语音信号处理:预处理【预加重、分帧、加窗】
- emlog插件,emlog采集插件,emlog伪原创发布插件
- 控制工程中的数学建模(1)——二阶有源低通滤波器(之一)
- java 文件上传(使用多线程)
- 9011,9012,9013,9014,8050,8550三极管的区别
- mac电脑投屏到小米盒子_苹果手机搜不到小米盒子怎么办?
- android动画封装,Android开场动画类完整实现代码
- php设置时区的两种方法
- 计算机考研基本信息,复旦大学计算机考研基本信息
- 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析
热门文章
- 说一说场内基金和场外基金的区别
- Centos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tarCentos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
- Python小爬虫:爬取开心网日记,乐趣无穷
- 华为服务器命令行修改密码,华为IAD命令行配置方法
- Cartographer(三)思岚雷达rplidar ros驱动使用报错与解决
- cobar rule 简介
- Ubuntu !生命不息,折腾不止!
- 艾瑞发布《2021 年全球互联网通信云行业研究报告》,融云持续领跑市场
- Friendship of Frog
- [游戏]求生之路新地图下载安装说明