函数初始

函数的定义与调用

'''
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. 编写一个带有main函数的类,调用上面的汽车类,实例化奔驰、大众、丰田等不同品牌和型号,模拟开车过程:启动、加速、转弯、刹车、息火,实时显示速度。

    //程序入口    public static void main(String[] args) {        // TODO Auto-generated method stub         ...

  2. Syncthing搭建

    现在貌似只有windows和linux比较号装. 安装 先从官网下载好Windows 32位版(我本本对应的系统版本)的Syncthing,解压后可以看到如下文件结构   Syncthing文件结构 ...

  3. mybatis3 @SelectProvider

    mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要介绍其中几个@Provider的使用方式,他们是:@SelectProvider.@UpdateProvider.@Insert ...

  4. Centos 安装Mongo DB

    NOSQL在很短的时间里使用人数据高涨,这不仅是它提出的一种新存储思想,更是因为它在对大数据做操作的效率,明显高于关系数据库 工具/原料   接入Internet的一台Centos计算机 下载安装文件 ...

  5. hibernate经常报的几个不起眼的错误, 都是因为不细心或者手滑了输入有误造成了

    最近会经常用到hibernate了, 也经常报错, 看着屏幕上一根大红条是非常不爽的, 这几天集合了一下经常报的错误, 整合一下放到这里, 以后再出现这个错误直接去解决就好了 1, org.hiber ...

  6. SpringCloud 简单理解

    0.SpringCloud,微服务架构.包括 服务发现(Eureka),断路器(Hystrix),服务网关(Zuul),客户端负载均衡(Ribbon).服务跟踪(Sleuth).消息总线(Bus).消 ...

  7. 百度BAE的一些使用心得

    休眠会释放单元资源停止收费,那就不用被百度收费了

  8. java小知识点简单回顾

    1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...

  9. 不同的路径12障碍物 · Unique Paths12

    [抄题]: 有一个机器人的位于一个 m × n 个网格左上角. 机器人每一时刻只能向下或者向右移动一步.机器人试图达到网格的右下角. 问有多少条不同的路径? [思维问题]: 以为要用count来计数: ...

  10. Linux符号连接的层数过多

    转:http://blog.csdn.net/ta893115871/article/details/7458869 创建符号链接的时候一定要使用绝对路径,例如:/usr/local/cxxt/con ...