1. 动态传参

  *, ** :

  形参: 聚合

  位置参数* -> 元组

def func(*args, a, b, c):
print(a, b , c, args)
func(1,2,3,4,5,6,7, a=8, b=9,c=10)

  关键字** -> 字典

def func(**kwargs):
print(kwargs)
func(a=1, b=2, c=3, haha="呵呵", good="not bad")

  实参: 打散

  列表, 字符串, 元素 -> *

  字典 -> **

  形参顺序:

  位置, *args, 默认值, **kwargs

  "无敌传参"

    def func(*args, **kwargs): arguments参数 keyword-arguments关键字参数

      pass

def hash(*args, **kwargs):
pass
def id(*args, **kwargs):
pass
def input(*args, **kwargs):
pass

  这几个函数都是这种"无敌传参"的模式

2. 作用域和名称空间

  名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的

  1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....

  2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)

  3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)

  名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

作用域:

  1. 全局作用域: 内置+全局

  2. 局部作用域: 局部

  globals() 查看全局作用

  locals() 查看当前作用域

def num():
a = 20
b = 30
print(locals()) # 查看当前作用域中的内容
print(globals()) # 查看全局作用域中的内容
num()

3. 函数的嵌套

  在函数中声明函数

  在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

def func1():
print("1")
def func2():
print("2")
def func3():
print("3")
print("4")
func3()
print(5)
print("6")
func2()
print("7")
func1() # 1 6 2 4 3 5 7

4. nonlocal和global关键字

  global: 在局部引入全局变量

  nonlocal: 在局部...内层函数引入外层离他最近的那个变量.

  只举一个全局变量的例子

flag = False 

def login():
global flag # 全局变量的调用
uname = input("用户名:")
upwd = input("密码:")
if uname == "alex" and upwd == "123":
flag = True
else:
flag = False

12 Python之函数进阶的更多相关文章

  1. 【转】Python之函数进阶

    [转]Python之函数进阶 本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函 ...

  2. Python之函数进阶

    本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函 ...

  3. 《Python》 函数进阶和名称空间作用域

    函数进阶: 一.动态参数:*args  **kwargs *args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args **kwargs接收的只是键值对的参数 ...

  4. 10.Python初窥门径(函数进阶)

    Python(函数进阶) 一.函数的传参(接上期) 形参角度(一共四种,后两种) 动态参数(万能参数)* # 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # * ...

  5. day09 python之函数进阶

    楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...

  6. python开发函数进阶:生成器表达式&各种推导式

    一,生成器表达式 #生成器表达式比列表解析更省内存,因为惰性运算 #!/usr/bin/env python #_*_coding:utf-8_*_ new_2 = (i*i for i in ran ...

  7. python开发函数进阶:匿名函数

    一,匿名函数 #简单的需要用函数去解决的问题 匿名函数的函数体 只有一行#也叫lambda表达式# cal2(函数名) = lambda n(参数) : n*n(参数怎么处理,并且返回值)#参数可以有 ...

  8. python开发函数进阶:可迭代的&迭代器&生成器

    一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的   iterable#str list tuple set dict#可迭代的 ——对应的标志 __iter__ 2.判断一个变量是不 ...

  9. Python入门-函数进阶

    昨天我们简单的了解了函数的定义,调用,以及传参,其实还有一个更重要的传参:动态传参,让我们继续昨天没有说完的,以及今天我要分享的东西. 一.动态传参 之前我们说过了传参,如果我们需要给一个函数传参,而 ...

随机推荐

  1. 【转】python 输入一个时间,获取这个时间的下一秒

    原文:https://blog.csdn.net/l_d_56/article/details/84832198 输入一个时间,获取这个时间的下一秒 PS:下面代码使用于 python 2.7 tim ...

  2. windows上配置pytorch

    操作系统:win10 已安装程序:Python 3.6 + Anaconda 5.1.0 + CUDA 9 pytorch官网:https://pytorch.org/ 1.进入官网,从Get Sta ...

  3. System 源码阅读

    System 属性说明 /** * System 类包含了几个有用的字段和方法,并且不能被实例化. * * @author unascribed * @since 1.0 */ public fina ...

  4. vs install 安装时自动添加注册表

    思路:使用自定义 解决方案添加类库项目 添加安装程序类 随后右键查看代码 在构造函数添加事件 同时完成这个事件,在此事件中根据需要添加我们需要的内容,此处为添加注册表,并根据安装目录添加url pro ...

  5. 2019.05.30 S4 BUPT BP 客户增强说明

    - 看了一圈,发现网上BUPT增强的很少,有的也是做一个字段的页签的增强,我自己花时间研究了一下,在BP增加新的interface 界面按钮. BP页签增强部分就不写了,大家看链接吧 加上如何做出新的 ...

  6. AESTest

    using Gaea.MySql; using System; using System.Data; using System.IO; using System.Security.Cryptograp ...

  7. 我想学前端动画-CSS之transition

    Transition属性: 属性 描述 CSS transition 简写属性,用于在一个属性中设置四个过渡属性. 3 transition-property 规定应用过渡的 CSS 属性的名称.默认 ...

  8. 【TypeScript】学习笔记 把一些需要记的记录一下

    安装typescript: npm install -g typescript 启动typesctipt自动编译: tsc 文件名.ts --watch 函数参数默认值: 1.有默认值参数的,声明在最 ...

  9. spark map和mapPartitions的区别

    package dayo1 import org.apache.spark.{SparkConf, SparkContext} import scala.collection.mutable.Arra ...

  10. centos7/redhat7安装mycli

    一.mycli介绍 MySQL的命令行客户端,可以执行自动完成和语法突出显示. 主页:http://mycli.net文档:http://mycli.net/docs github:https://g ...