Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

内容大纲

1.函数的动态参数

2.函数的注释

3.名称空间

4.函数的嵌套

5.global以及nolocal的用法

1.函数的动态参数

# def func(a,b=1):
# print(a,b)
#
# func(1) def func(a,b,*args):
print(a,b,args) # * 聚合
print(a,b,*args) # * 打散
func(1,2,3,4,5,6,7,8,9,0)
*args 是万能(接受任意多个)的位置参数 在函数定义的时候叫做聚合 # def func(a,b,*args):
# *args 是万能(接受任意多个)的位置参数 *在函数定义的时候叫做聚合
#
# func(1,2,3,4,5,6,7,8,9,0)
位置参数 > 动态位置参数 > 默认参数 # def func(*args,a=1,b=2):
# print(a,b,args) # 元组(接受的位置参数)
# func(12,15,16,19,10) # def func(a,b,**kwargs):
# print(a,b,kwargs) # 字典(接受的关键字的参数)
# func(1,2,c=1,d=2) # def func(a,b,*args,c=1,d=2):
# print(a,b,*args,c,d)
# func(1,2,3,4) def func(a,b,*args,c=1,d=2,**kwargs):
print(a,b,*args,c,d,kwargs)
*kwargs -- 获取到的字典的键
# func(1,2,3,4,c=8,d=10,e="alex",f="wusir") def func(*agrs,**kwargs): # 万能传参
print(agrs,kwargs)
func(1,2,3,4,5,6,7,8,a=1,b=2,c=3) 参数的优先级: 位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数
1.万能传参: 动态位置参数,动态关键字参数 (最常用******)
2.位置参数,动态位置参数
3 动态位置参数,关键字参数,动态关键字参数

2.函数的注释

写好函数的定义后,换行,三个双引号回车自动弹出所需注释的内容
每次写函数需要写注释
函数名__doc__
# def func(a,b):
# """
# 逻辑判断...
# :param a: str
# :param b: int
# :return: bool
# """
# print(a,b) # def func1(user,password):
# """
# 密码加密
# :param user: 用户名 str
# :param password: 密码 str
# :return: 加密的密码 MD5
# """
# print(user,password) # print(func.__doc__)
print(func1.__doc__)
print(func.__name__)

3.名称空间

# print(11)
# a = 10
#
# def func():
# b = 20
# print(b) 内置空间 : Python解释器自带的,print input len
全局空间 : 当前py文件需要开辟的空间存放在全局空间
局部空间 : 函数中开辟的空间就是局部空间 加载顺序:
# 内置空间 > 全局空间 > 局部空间 取值顺序:
# 局部空间 > 全局空间 > 内置空间(找不到就报错了!) 作用域:
# 全局作用域: 内置空间 + 全局空间
# 局部作用域: 局部空间

4.函数的嵌套

# def func():
# print(1)
# def f1():
# print(2)
# return f1()
# func()
#结果:1 2
# def func():
# print(1)
# def f1():
# print(2)
# return func()
# func()
#结果:无限循环1 不管在什么位置,只要是函数名+() 就是在调用此函数
函数调用执行后,函数体中开辟的空间就自动销毁了 # def func():
# a = 1
# def foo():
# b = 2
# print(b) # 2
# print(a) # 1
# def f1():
# print(b) # 2
# return f1()
# return foo()
# print(func())
#2
#1
#2
#None # 函数互相引用 # def func():
# a = 1
# foo()
# print(a)
#
# def foo():
# b = 2
# print(b)
# func()
#结果:
#2
#1 # def a():
# a1 = 1
# c()
# print(c)
# def b():
# b1 = 2
# print(b1)
# def c():
# c1 = 3
# print(a)
# def run():
# a()
# run()
#结果:返回是a,c的地址
#<function a at 0x000000141BA21E18>
#<function c at 0x000000141D93AA60>

# def func():
# a = 1
# def b():
# print(a)
#
# def foo():
# b = 1
# def z():
# print(func)
# print(b)
# ret = z()
# func()
# return ret
#
# def run():
# foo()
# print(run())
#结果:
#<function func at 0x00000012E4CE1E18>
#1
#None
切记返回值,不写的时候默认返回None # def func(a):
# foo(a) #10
# def foo(e):
# b(e) # return 10
# def b(c):
# print(c)
# return 10
# print(func(5))
#结果:
#5
#None
由于中间没有return,所以在返回的途中断掉传送

5.global及nolocal的用法

# def func():
# global a
声明修改全局变量的值
只会改变全局变量的值
# a += 1
# print(a)
# func()
# print(a) # a = 10
# def f1():
# a = 10
# def f2():
# a = 15
# def f3():
# global a
# a += 1
# print(a) # 11
# print(a) # 15
# f3()
# print(a) # 10
# f2()
# f1()
#结果:
#10
#15
#11

# a = 10
# def func():
# def f1():
# global a
# a += 1
# def foo():
# nonlocal a
# a += 1
# print(a) # 31
# foo()
# print(a) # 31
# f1()
# func()
# print(a) # 10 global : 修改全局空间的变量对应的值
nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数 nolocal例子:
a = 1
def fun_1():
a = 2
def fun_2():
nonlocal a
a = 3
def fun_3():
a = 4
print(a)
print(a)
fun_3()
print(a)
print(a)
fun_2()
print(a)
print(a)
fun_1()
print(a)
结果:
1
2
3
4
3
3
1

6.今日总结

# 1.函数的动态参数
# *args,**kwargs (能够接受动态的位置参数和动态的关键字参数)
# 定义阶段(*args,**kwargs) 聚合
# *args - tuple
# **kwargs -- dict
# 使用阶段*args,*kwargs 打散
# *args - 源数据类型
# *kwargs - 打散是字典的键
# 优先级: 位置 > 动态位置> 默认 > 动态关键字 # lst = [12,23,3,4,5,6]
# def func(*args):
# print(*args)
# func(lst[0],lst[1]) # 笨的办法
# func(*lst) # dic = {"key":1,"key1":34}
# def func(**kwargs):
# print(kwargs)
# func(**dic) # 2.函数的注释
"""
每次写函数的时候需要写注释
函数名.__doc__
""" # 3.名称空间
# 内置空间: python解释器自带的
# 全局空间:当前文件(.py文件)
# 局部空间:函数体开辟的空间 # 加载顺序: 内置 > 全局> 局部
# 取值顺序: 局部 > 全局 > 内置 # 作用域:
# 全局作用域 内置 + 全局
# 局部作用域: 局部 # 4.函数嵌套
# 函数中套函数
# 函数嵌套调用
# 函数嵌套参数的传递
# 函数嵌套返回值的传递 # 5.global nonlocal
# global : 修改全局空间的变量对应的值
# nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
# 只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数 # 6.三元运算符
# a = 10
# b = 20
# c = a if a> b else b
# 变量名 = 条件成立的结果 条件 条件不成立的结果

Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法的更多相关文章

  1. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  2. python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

    今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...

  3. 函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用

    一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部 ...

  4. python基础知识-day8(动态参数)

    1.动态参数 函数的形式参数个数不确定.函数的形式数据类型不确定,使用动态参数,*代表元组,**代表字典. 2.代码案例演示 1 def func(*args,**kwargs): 2 print(a ...

  5. CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】

    函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...

  6. python 之 面向对象基础(定义类、创建对象,名称空间)

    第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问 ...

  7. 百万年薪python之路 -- 函数的动态参数

    1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...

  8. 函数动态参数和Python中的三种空间

    动态参数 : *args 实参角度: 定义一个函数时, * 将所有的位置参数聚合到一个元祖中 顺序 : 位置参数 > * args > 默认参数 > **kwargs 接受所有参数 ...

  9. 第5章函数进阶 第5.1节 Python函数的位置参数、关键字参数精讲

    前面第二章简单介绍了函数定义的语法,经过后面一系列的学习,函数有必要再次介绍一下相关内容. 一.    关于函数的语法 1.    语法 def 函数名([参数]): 函数文档字符串 函数体      ...

随机推荐

  1. Astah类图中使用list<>

    如何在类图中表示如下的属性,这个问题困扰了我好久.之前百度找不着任何相关的内容,今天终于在其官方论坛找着了答案. class cMeterRecord { protected: cMeterStatu ...

  2. Install Centos7 on VirtualBox in mac

    Step 1:准备虚拟机及镜像 下载合适的Virtual Box版本 官方下载链接:https://www.virtualbox.org/wiki/Downloads 这里选择的版本是:https:/ ...

  3. fiddler修改请求参数

    1.打开fiddler ,点击界面左侧左侧底部 2.此图标为before request请求(修改请求参数时,设置这个,可以修改请求参数) 3..再次点击该按钮,将图标切换到下图after respo ...

  4. loads和dumps的用法

    import json s='{"name":"wuxie","sex":"m","data":nu ...

  5. selenium(2)-selenium针对浏览器的操作有哪些

    对浏览器有哪些操作 最大化.最小化浏览器 控制.获取浏览器大小 获取当前标签页title.url 前进.后退.刷新 执行js语句 打开.关闭,切换新标签页 滚动页面 上传附件 鼠标悬停 对话框的定位方 ...

  6. 虚拟机VMware克隆之后网络不可用的解决办法

    现在有两台虚拟机,113是111的克隆,要让113能够使用,需要做下面的修改 5.解决办法5.1.修改克隆后机器(B机器)70-persistent-net.rules文件内容 对克隆后机器(B机器) ...

  7. 10、一个action中处理多个方法的调用第一种方法动态调用

    我们新建一个用户的action package com.weiyuan.test; import com.opensymphony.xwork2.ActionSupport; /** * * 这里不用 ...

  8. IDEA记坑之移动项目文件之后,import 找不到文件以及出现Cannot access的问题

    今天本想挪动下文件,使项目更加可观,易整理,但是挪动后出现各种问题,import xxx;全部飘红.部分切面还出现Cannot access:试过了重启idea,rebuild....各种方法都行不通 ...

  9. linux主机连接sftp报错received unexpected end-of-file from SFTP server

    SFTP 连接主机失败,提示信息如下: 登陆目标主机,编辑查看 /etc/ssh/sshd_config 文件,找到 Subsystem 关键字 替换为 Subsystem sftp internal ...

  10. openstack-taskflow 组件记录

    [Summary] TaskFlow 是一个为了 openstack 实现的 python 库,使得执行 task 变得简单,一致,易扩展,可靠: 它能以一种声明的方式,将轻量级 task 对象的创建 ...