1、动态参数的作用:

能够接收不固定长度参数

位置参数过多时可以使用动态参数

* args是程序员之间约定俗称(可以更换但是不建议更换)

* args获取的是一个元组

** kwargs获取的是一个字典

* args只接受多余的位置参数

** kwargs只接受多余的动态关键字参数/可变关键字参数

def func(*args):    #形参位置上的*是聚合
print(*args) #函数体中的*就是打散
print(args)
func(1,2,3)
结果:1 2 3
  (1,2,3)
函数的参数优先级:位置参数 > 动态位置参数(可变位置参数) > 默认参数 > 动态关键字参数(可变关键字参数)
def func(a,b,m = 8,*args,**kwargs):
print(a,b,m,args,kwargs)
func(1,2,5,c=10)
结果:1 2 5 () {'c': 10}
万能参数:
def func(*args,**kwargs):
print(args,kwargs)
func(12,2,121,12,321,3,a = 1,b = 4)
结果:(12, 2, 121, 12, 321, 3) {'a': 1, 'b': 4}
打散 and 聚合 and 打散:
lst = [1,2,3,4,6,7]
def func(*args): #形参位置上加*是聚合
print(*args) #函数体中加*是打散
func(*lst) #调用函数中加*是打散
结果:1 2 3 4 6 7
2、josn 数据和字典长得一模一样
3、函数的注释:给别人看的、三个双引号敲回车:
注释写法一:
def add(a,b):
"""
数字的加法运算
:param a: int
:param b: int
:return: int
"""
return a + b
print(add(1,2))
结果:3
注释写法二:
def add(a:int,b:int):   #提示的int没有做到约束
"""
加法
:param a:
:param b:
:return:
"""
return a + b
print(add("a","b"))
结果:ab
4、查看函数的注释:print(add.__doc__)
结果:
  加法
  :param a:
  :param a:
  :return :
5、查看函数的名字:print(add.__name__)
结果:add
6、名称空间:
内置空间:存放python自带一些函数
全局空间:当前py文件顶格编写的代码开辟的空间
局部空间:函数开辟的空间
程序加载顺序:内置空间 > 全局空间 > 局部空间
程序取值顺序:局部空间 > 全局空间 > 内置空间
7、查找图解:

8、作用域:
全局作用域:内置 + 全局  globals按位置查看全局作用域下开辟的空间、结果是字典形式。
局部作用域:局部      locals查看当前作用域(建议查看局部)
a = 10
def func():
b = 5
print(locals())
print(globals())
9、函数名的第一类对象:
函数名可以当做值、赋值给一个变量
def func():
print(1)
a = func
a()
print(func) #查看函数的信息
函数名可以当做另一个函数的参数来使用:
def func():
print(1)
def foo(a):
print(a) #func这个函数的内存地址
foo(func)
函数名可以当做另一个函数的返回值:
不管在什么位置、只要是看到函数名+()就是调用函数
def func():
print(1)
def foo(a): #a = func
return a #return func函数的内存地址
cc = foo(func)
print(cc)
结果:<function func at 0x00000000003F2EA0>
函数名可以当做元素存储在容器中:
def login():
print("注册")
def register():
print("登录")
def shopping():
print("逛")
def add_shopping_car():
print("加")
def buy_goods():
print("买")
msg = """
1.注册
2.登录
3.逛
4.加
5.买
请输入您要选择的序号:
"""
func_dic = {
"1":login,
"2":register,
"3":shopping,
"4":add_shopping_car,
"5":buy_goods,
}
while True:
choose = input(msg)
if choose in func_dic:
func_dic[choose]()
else:
print("滚")
10、函数嵌套:
交叉嵌套

结果:2

   1

   3

结果:    3

    1

    "我太难了"

    2

    4

结果:4 7

      None

11、global:

在局部空间中可以使用全局中的变量、但是不能修改、如果要强制修改需要添加global

当变量在全局存在时global就是申明我要修改全局的变量、并且会在局部开辟这个变量

当变量在全局中不存在时global就是申明要在全局创建一个变量、并且会在局部开辟这个变量

a = 10
def func():
global a
a = a + 1
func()
print(a)
结果:11

字典是可变数据类型、在局部使用全局进行修改不用使用global

a = {"name":"zd"}
def func():
a["name"] = "lisi"
func()
print(a)
# 结果:{'name': 'lisi'}
12、nonlocal:
只修改局部空间中的变量、最外层的一个函数
只修改离nonlocal最近的一层、如果这一层没有就往上一层查找、只能在局部
def func():
a = 10
def foo():
a = 5
def f():
nonlocal a
a = a + 1
print(a)
f()
foo()
func()
结果:6
作业题:
# 1、用代码模拟博客园系统
# 首先程序启动,显示下面内容供用户选择:
# 1.请登录
# 2.请注册
# 3.进入文章页面
# 4.进入评论页面
# 5.进入日记页面
# 6.进入收藏页面
# 7.注销账号
# 8.退出整个程序
# 必须实现的功能:
# 1.注册功能要求:
# a.用户名、密码要记录在文件中。
# b.用户名要求:不能有特殊字符并且确保用户名唯一。
# c.密码要求:长度要在6~14个字符之间。
# 2.登录功能要求:
# a.用户输入用户名、密码进行登录验证。
# b.登录成功之后,才可以访问3 - 7选项,如果没有登录或者登录不成功时访问3 - 7选项,不允许访问,提示用户进行登录!
# c.超过三次登录还未成功,则退出整个程序。
# 进入文章页面要求:
# 提示欢迎xx进入文章页面。(xx是当前登录的用户名
# 进入评论页面要求:
# 提示欢迎xx进入评论页面
# 进入日记页面要求:
# 提示欢迎xx进入日记页面。
# 进入收藏页面要求:
# 提示欢迎xx进入收藏页面。
# 注销账号要求:
# 不是退出整个程序,而是将已经登录的状态变成未登录状态(在次访问3~7选项时需要重新登录)
# 退出整个程序要求:
# 退出整个程序要求:
# 用代码实现三次用户登录及锁定(选做题,这是一个单独的程序)
# 首先程序启动,显示下面内容供用户选择:
# 注册
# 登录
# 用户选择登录的时候,首先判断用户名在userinfo.txt表中存在不在,存在就不能进行注册
# 当注册的用户名不存在的时候将用户名和密码写入到userinfo.txt文件中
# 用户选择登录的时候,判断用户输入的账号和密码是否userinfo.txt存储的一致
# 用户名和密码一致就终止循环,并提示用户登录成功!
# 用户名和密码不一致,只有三次登录机会,三次过后提示用户名被锁定,请联系管理员!并终止循环
# 当用户名错误三次,再次运行程序.登录锁定的账号继续提示用户名被锁定,请联系管理员!
login_dic = {
"username":None,
"flag":False, #登录成功是true、登录不成功是false
"count":3
}
def login(func=None):
"""
登录
:return:
"""
while login_dic["count"]:
user = input("username:")
pwd = input("password:")
with open("userinfo","a+",encoding="utf-8") as f:
f.seek(0)
for i in f:
file_user,file_pwd = i.strip().split(":")
if file_user == user and file_pwd == pwd:
login_dic["count"] = 3
login_dic["username"] = user
login_dic["flag"] = True
print("登录成功")
if func:
func()
return
else:
login_dic["count"] -= 1
print("账号或密码错误")
if login_dic["count"] == 0:
exit()
def register():
"""
注册
:return:
"""
user = input("username:")
pwd = input("password:")
with open("userinfo","a+",encoding="utf-8") as f:
f.seek(0)
if user.isalpha() and 14 > len(pwd) > 6:
for i in f:
file_user,file_pwd = i.strip().split(":")
if file_user == user:
print("用户名已存在!")
return
else:
f.write(f"{user}:{pwd}\n")
print("注册成功!")
else:
print("注册失败")
def comment():
print(f"欢迎{login_dic['username']}登录评论区")
def log():
print(f"欢迎{login_dic['username']}登录日志区")
def article():
print(f"欢迎{login_dic['username']}登录文章区")
def collect():
print(f"欢迎{login_dic['username']}登录收藏区")
def log_out():
login_dic['username'] = None
login_dic['flag'] = False
print("注销成功")
func_dict = {
"1":login,
"2":register,
"3":comment,
"4":log,
"5":article,
"6":collect,
"7":log_out,
"8":exit
}
msg = """
1.请登录
2.请注册
3.进入文章页面
4.进入评论页面
5.进入日记页面
6.进入收藏页面
7.注销账号
8.退出整个程序
请输入序号:
"""
while True:
choose = input(msg)
if choose in func_dict:
if choose == "1" or choose == "2" or choose == "8":
func_dict[choose]()
elif login_dic['flag']:
func_dict[choose]()
else:
login(func_dict[choose])
else:
print("请重新输入")

python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。的更多相关文章

  1. 百万年薪python之路 -- 函数的动态参数练习

    1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...

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

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

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

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

  4. Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归

    Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...

  5. 函数的动态参数与命名空间 day10

    一.动态参数(不定长参数)def func(*args): 形参: 3种 动态参数 args元组,他包含了你所有的位置参数. *args 动态参数,不定长参数 **kwargs 他包含了关键字动态参数 ...

  6. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

  7. 函数补充:动态参数,函数嵌套,global与nonlocal关键

    一丶动态参数 1.*args 位置参数,动态传参 def func(*food): print(food) print(func("米饭","馒头"," ...

  8. 自学python day 10 函数的动态参数、命名空间、作用域

    作业提升: s为字符串 s.isalnum() 所有字符都是字母或者数字 s.isalpha() 所有字符都是字母 s.isdigit() 所有字符否是数字 2. for i in range(1,1 ...

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

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

随机推荐

  1. 《Java多线程设计模式》学习

    还是别人的笔记比较详细: https://segmentfault.com/blog/ressmix_multithread?page=3 mark.

  2. 了解css

    css指层叠样式表(Cascading Style Sheets) 1.样式定义如何显示HTML元素 2.样式通常存储在样式表中 把样式添加到HTML4.0中,是为了解决内容与表现分离的问题 外部样式 ...

  3. SQL Server 修改数据库

    1. 可视化界面修改数据库 (1)右击数据库,然后选择属性. (2)在工具选项卡中,选择[文件]页,可以更改所有者,文件大小,自增量等参数. 2.  使用ALTER Database修改数据库 (1) ...

  4. csp模拟题-201903

    1.小中大(100分) #include<iostream> #include<cstdio> #define maxn 100010 using namespace std; ...

  5. 【搜索】N皇后问题

    原题传送门 思路 很经典的搜索题,但本蒟蒻卡了1个多小时,搜索部分很简单,但是判重的部分是真的蛋疼,我写了一个高效率的判重算法,但是无论检查多少遍都没有问题的算法却总是WA......后来我干脆写了一 ...

  6. 如何在Console下面生成一个WIN32窗口

    一个小挑战? VS2017里面,新建一个控制台工程,输入名字(你不需要也成,有默认的),得到一个控制台工程. 好了,生成的代码,如下: // Win32InConsole.cpp : This fil ...

  7. js json字符串与json对象互相转换(最全)

      1.json字符串转json对象 使用场景:通常在取json字符串里具体的值时,会用到. var jsonString = '{"name":"Marydon&quo ...

  8. Azure ARM (23) Azure Policy使用

    <Windows Azure Platform 系列文章目录> 在之前的文档中,我们介绍了Azure Policy的使用场景. 本章我们介绍如何创建和使用Azure Policy. 模拟场 ...

  9. git 给分支添加描述 管理分支实用方法

    1.背景 在我们工作中,正常情况我们处在一个迭代中,一个人最多会有几个功能,比较正常的操作我们会给每个大功能创建不同的分支,方便管理. 我们可以非常愉快的进行版本管理,遇到特殊情况我们也可以方便版本退 ...

  10. kafka中消费者消费消息之每个线程维护一个KafkaConsumer实例

    1.首先启动自己的kafka集群哟. 启动zk: bin/zkServer.sh start conf/zoo.cfg. 验证zk是否启动成功: bin/zkServer.sh status conf ...