拆包

列表和元组的拆包:会拆成位置参数

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

【 第八节 函数作用域】相关推荐

  1. python中函数的作用域_Python中的函数作用域

    在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...

  2. 变量作用域函数作用域

    一. 变量作用域 1)全局变量 在全局环境下声明的变量被视为全局变量. 在没有使用var进行声明的时候,变量就被定义为全局变量.在ES5的严格模式下,如果变量没有使用var来声明是会报错的. 2)局部 ...

  3. javascript函数作用域与闭包

    8.8. 函数作用域与闭包        如第四章所述,JavaScript函数的函数体在局部作用域中执行,局部作用域不同于全局作用域.本章将解释这些内容和相关的作用域问题,包括闭包.[*] [*] ...

  4. 前端JS: 通过代码-看函数作用域this对象

    函数中的this对象,指向的是调用该函数的对象:谁调用它,它的作用域中的this就指向谁: 每一个具体的问题,都值得思考这个细节点: 1.以下输出结果是: var obj={name:'test',o ...

  5. 函数作用域的静态变量

    2019独角兽企业重金招聘Python工程师标准>>> 下面这段话来自百度百科: 静态局部变量属于静态存储方式,它具有以下特点:     (1) 静态局部变量在函数内定义,但不像自动 ...

  6. python十五:函数作用域-函数即变量

    # 函数作用域 def liubei():name = "刘备"print(name)def guanyu():name = "关羽"def zhangfei( ...

  7. 浅谈JavaScript 函数作用域当中的“提升”现象

    在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的. 例如 : message = "hello JavaScript ! " ...

  8. javascript中函数作用域和声明提前

    javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域. 函数作用域:变量在声明它们的 ...

  9. 函数作用域,闭包,数据类型的题目

    第一题:函数作用域和闭包 var a = 9 function fn(){a = 0return function (b){return b+a++} } var f = fn() console.l ...

最新文章

  1. mysql字段名与关键字冲突(near to:syntax error)
  2. Java CAS AtomicInteger使用
  3. Redis中的发布与订阅的概念与以命令行的方式实现发布订阅举例
  4. typeset的常见用法
  5. Computer Vision的尴尬
  6. IDEA调试技巧之条件断点
  7. json yeid_如何控制Scrapy yield的顺序
  8. Coursera机器学习week11 单元测试
  9. php 删除前后空格,php怎么去除前面空格
  10. React中插入视频(video-react),自动播放
  11. 语音信号处理:预处理【预加重、分帧、加窗】
  12. emlog插件,emlog采集插件,emlog伪原创发布插件
  13. 控制工程中的数学建模(1)——二阶有源低通滤波器(之一)
  14. java 文件上传(使用多线程)
  15. 9011,9012,9013,9014,8050,8550三极管的区别
  16. mac电脑投屏到小米盒子_苹果手机搜不到小米盒子怎么办?
  17. android动画封装,Android开场动画类完整实现代码
  18. php设置时区的两种方法
  19. 计算机考研基本信息,复旦大学计算机考研基本信息
  20. 基于STM32的电机--直流有刷电机H桥驱动的不同模式分析

热门文章

  1. 说一说场内基金和场外基金的区别
  2. Centos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tarCentos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  3. Python小爬虫:爬取开心网日记,乐趣无穷
  4. 华为服务器命令行修改密码,华为IAD命令行配置方法
  5. Cartographer(三)思岚雷达rplidar ros驱动使用报错与解决
  6. cobar rule 简介
  7. Ubuntu !生命不息,折腾不止!
  8. 艾瑞发布《2021 年全球互联网通信云行业研究报告》,融云持续领跑市场
  9. Friendship of Frog
  10. [游戏]求生之路新地图下载安装说明