函数初始

函数的定义与调用

'''
def 函数名 (参数):
函数体 函数名:设定与变量相同
执行函数: 函数名()
'''

函数的返回值

# 函数返回值 return
'''
1、遇到return,结束函数
2、给函数的调用者(执行者)返回值
无return返回None
return不写 或者None返回 None
return返回单个数
return返回多个值,将多个值放在元组中返回
'''

函数的参数

'''
从实参角度
1 位置参数 必须--对应,按照顺序
2 关键字参数 必须--对应,不分顺序
3 混合参数 --对应,关键字参数必须在位置参数的后面
形参角度
1 位置参数 和实参的位置参数一致
2 默认参数 默认参数必须在位置参数后面
3 动态参数 万能参数 *args **kwargs,适用于传参个数不固定
*args 接收所有的位置参数
**kwargs 接收所有的关键字参数 形参最终的摆放顺序: 位置参数,*args, 默认参数, **kwargs
'''
#三元运算
#ret = a if a > b else b
# def compare(a, b):
# if a > b:
# return a
# else:
# return b
# print(compare(1, 2))
# 需求把l1 和 l2 列表中的每个传输传递到args中
def func1(*args, **kwargs):
print(args)
print(kwargs) l1 = [1,2,3,4]
l2 = [5,6,7,8]
# 需求把l1 和 l2 列表中的每个传输传递到args中
func1(*l1, *l2)
dic1 = {'name1' : 'alex'}
dic2 = {'name2' : 'eric'}
#需求把dic1和dic2中的每一个键值对传入kwargs
# 实现需求的方法
func1(**dic1, **dic2)

函数的进阶

命名空间和作用域

命名空间一共分为三种:

  全局命名空间

  局部命名空间

  内置命名空间

 

名称空间: 全局名称空间 局部名称空间 内置名称空间
名称空间,命名空间: 变量与值的内存地址的关系 临时名称空间:局部名称空间,只要函数一致性,会临时开辟一块内存空间,存入函数里面的函数与值的关系,随着函数的执行结束,临时名称空间消失 作用域:
全局作用域: 全局名称空间, 内置名称空间
局部作用域: 局部名称空间 加载顺序: 内置名称空间--》全局名称空间--》局部名称空间(函数执行时)
取值顺序: 局部名称空间--》全局名称空间--》内置名称空间(从内到外的)

global关键字,nonlocal关键字

global:

  1,声明一个全局变量。

  2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

#函数可以引用全局变量,但是不能改变

# global 1、声明一个全局变量
# def func1():
# global name
# name = 'alex'
# return
# func1() #必须执行下函数,才会声明为全局变量
# print(name)

nonlocal:

  1,不能修改全局变量。

  2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

#nonlocal 只能操作一个非全局变量,对局部作用域的函数进行引用及修改
'''
name1 = 'alex'
def func1():
nonlocal name1
name1 = 'wusir'
return
func1()
print(name1) SyntaxError: no binding for nonlocal 'name1' found
# def func1():
# name = 'alex'
# print(name)
# def inner():
# nonlocal name
# name = 'wusir'
# print(name)
# inner()
# print(name)
# func1()

关键字

# globals locals
# 打印函数内所有的局部变量 和全局变量
def fun1():
print(globals())
print(locals())
# count += 1
print(count)
fun1() return --》{'__name__': '__main__', '__doc__': '\n名称空间: 全局名称空间 局部名称空间 内置名称空间\n名称空间,命名空间: 变量与值的内存地址的关系\n\n临时名称空间:局部名称空间,只要函数一致性,会临时开辟一块内存空间,存入函数里面的函数与值的关系,随着函数的执行结束,临时名称空间消失\n\n作用域:\n 全局作用域: 全局名称空间, 内置名称空间\n 局部作用域: 局部名称空间\n\n加载顺序: 内置名称空间--》全局名称空间--》局部名称空间(函数执行时)\n取值顺序: 局部名称空间--》全局名称空间--》内置名称空间(从内到外的)\n\n闭包\n内层函数对外层函数非全局变量的引用\n闭包的好处:如果python监测到闭包,他有一个机制,你的局部作用域不会随着函数结束而结束\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000002149278>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/pycharm/untitled/自动化运维21期/day3/03函数的进阶.py', '__cached__': None, 'count': 1, 'fun1': <function fun1 at 0x00000000020A1F28>}
{}
1

函数名的本质

'''
函数名
1、函数名相当于变量,可以互相赋值
def func1()
pass
f1 = func1 2、函数名可以当做函数的参数
def func1():
print(666)
def func2(argv):
print(777)
argv()
func2(func1) output:
777
666 3、可以当成容器类数据类型的参数
# 需求是100个函数,依次执行
def func1():
print(666)
def func2():
print(777)
def func3():
print(888) l1 = [func1, func2, func3]
for n in l1:
n() 4、函数名可以当做函数的返回值
def func1():
print(666)
def func2(argv):
print(777)
return argv
ret = func2(func1)
ret() output:
777
666
'''

闭包

内层函数对外层函数非全局变量的引用
闭包的好处:如果python监测到闭包,他有一个机制,你的局部作用域不会随着函数结束而结束
非闭包的demo
name = 'alex'
def func1():
def inner():
print(name)
print(inner.__closure__)
func1() return --》 None 闭包demo
def wrapper():
name = 'alex'
def inner():
print(name)
print(inner.__closure__)
wrapper() return --> (<cell at 0x00000000026A55B8: str object at 0x00000000027270D8>,) def wrapper(argv):
def inner():
print(argv)
print(inner.__closure__) wrapper('alex')(<cell at 0x00000000021455B8: str object at 0x00000000026F7298>,) return -->

day3之函数的初始及进阶的更多相关文章

  1. python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)

    一.函数的初始 比如python没有len()方法,如何求字符串的长度使用for循环 s = 'fdshfeigjoglfkldsja' count = 0 for i in s: count += ...

  2. python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)

    一.函数的初始 比如python没有len()方法,如果求字符串的长度 使用for循环 s = 'asdfadsf' count = 0 for i in s: count += 1 print(co ...

  3. 微信小程序云开发-云函数-调用初始云函数获取openid

    一.调用初始云函数获取openid的两种方法 1.传统的success和fail 2.ES6的.then和.catch 3.编译结果 说明:初始云函数,是指刚创建完成的云函数.默认系统写的代码.

  4. day3 python 函数

    常犯的错误: IndentationError:expected an indented block说明此处需要缩进,你只要在出现错误的那一行,按空格或Tab(但不能混用)键缩进就行... 函数是指一 ...

  5. error C2448 函数样式初始值设定项类似函数定义

    类似这种的 int grow_expansion(elen, e, b, h) int elen; REAL *e; REAL b; REAL *h; { // function definition ...

  6. python 的基础 学习第十天函数的初始

    1,什么是函数,函数就是封装一个功能. 怎么定义函数. # def my_len():#def 是关键字,定义一个一个函数.#my_len():就是函数名,必须和关键字加一个空格,后面加括号和冒号.d ...

  7. python27期day09:函数的初始、函数的定义、函数的调用、函数的返回值、函数的参数、作业题。

    1.函数的作用:封装代码.大量的减少了重复的代码. 2.全局空间:顶行写的就是全局空间. 图解 : 3.函数的定义: def 是一个关键字.申明要定义一个函数 my_len 函数的名字.遵循变量命名的 ...

  8. swift函数和初始化控件(// MARK:分割线)

    import UIKit , , , )         view.backgroundColor = UIColor.redColor()         self.view.addSubview( ...

  9. python基础学习(十三)函数进阶

    目录 1. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 2. 函数的返回值进阶 例子:显示当前的湿度和温度 例子:交 ...

随机推荐

  1. cmake编译参数

    进入源码目录后 cmake . -LH  --查看之前编译参数 ccmake .  使用cmake gui界面进行查看和编辑编译用到的参数 (推荐) 源码目录下 INSTALL-SOURCE 文件后面 ...

  2. 关于frameset与iframe的使用

    <frameset>与<body>标签同级,是不能同时存在的,<frameset>是把当前页面进行分割. frameset.html: <!DOCTYPE h ...

  3. Ansible develop module

    def cnf(action,configs,path): message = "Modify %s\n" %path changed = False if action == & ...

  4. DES_3DES_AES_IDES_RSA密码算法比较

    对称加密算法(也叫共享密钥) 类型 定义:发送接收使用相同的对称密钥 密钥 长度 分组长度 循环次数 安全性 DES 数据加密标准,速度较快,适用于加密大量数据的场合: 56 64 16 依赖密钥受穷 ...

  5. mybatis动态sql trim

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...

  6. pymongo的常用操作

    环境:pymongo3.0.3,python3 以下是我整理的一些关于pymongo的操作,网上很多是用pymongo.Connecion()去连接数据库的,但是我这里连接一直提示没有这个包,如果大家 ...

  7. 让IE浏览器支持CSS3表现

    http://www.zhangxinxu.com/wordpress/2010/04/%e8%ae%a9ie6ie7ie8%e6%b5%8f%e8%a7%88%e5%99%a8%e6%94%af%e ...

  8. Graph Coloring I(染色)

    Graph Coloring I https://www.nowcoder.com/acm/contest/203/J 题目描述 修修在黑板上画了一些无向连通图,他发现他可以将这些图的结点用两种颜色染 ...

  9. phython学习

    Python 中文学习大本营 关于作者 赞助本站 The Python Tutorial (Python 2.7.X) 的中文翻译版本.Python Tutorial 为初学 Python 必备官方教 ...

  10. Codeforces 631C. Report 模拟

    C. Report time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...