python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。
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(修改局部的)、函数名的第一类对象及使用、作业题。的更多相关文章
- 百万年薪python之路 -- 函数的动态参数练习
1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...
- 百万年薪python之路 -- 函数的动态参数
1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...
- Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...
- Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归
Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...
- 函数的动态参数与命名空间 day10
一.动态参数(不定长参数)def func(*args): 形参: 3种 动态参数 args元组,他包含了你所有的位置参数. *args 动态参数,不定长参数 **kwargs 他包含了关键字动态参数 ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
- 函数补充:动态参数,函数嵌套,global与nonlocal关键
一丶动态参数 1.*args 位置参数,动态传参 def func(*food): print(food) print(func("米饭","馒头"," ...
- 自学python day 10 函数的动态参数、命名空间、作用域
作业提升: s为字符串 s.isalnum() 所有字符都是字母或者数字 s.isalpha() 所有字符都是字母 s.isdigit() 所有字符否是数字 2. for i in range(1,1 ...
- 函数动态参数和Python中的三种空间
动态参数 : *args 实参角度: 定义一个函数时, * 将所有的位置参数聚合到一个元祖中 顺序 : 位置参数 > * args > 默认参数 > **kwargs 接受所有参数 ...
随机推荐
- arduino (3) 控制sim900A发送短信
狗屎佳世通旗舰店,卖的什么破玩意sim900a芯片,不支持联通卡,还生明模块支持双卡的 之前买的esp8266-07都是内存偷工减料 买的液体浊度传感器给的原理图也不给基本接线. 差评垃圾店,你敢卖就 ...
- ln -s 文件夹变成文件(txt) / linux 链接出错
问题: 平时没有注意过这这个问题,当我使用ln -s xxx yyy 将xxx 移动到yyy 路径时,文件夹就变成了txt文件, 解决: 找了半天,在stackoverflow上找到了答案,很简单, ...
- B1013(通过)
这种方法是采用B1017的那个求素数的算法,并且送一个比较大的数值当作上线(20000),也可以进一步压缩,但是这个数已经够用了,就没有再试了. python方便是方便,但是真的慢 def isPri ...
- 小明工具箱<Excel 插件><VSTO 插件>
当前版本:1.0.42.7118(更新日期:2019年6月28日) 下载地址:点击下载 功能和简介: 本程序为 Excel 2010 版本以上的插件,含以下功能: 拆分工作簿:将一个或多个工作簿中的每 ...
- spring boot 不占用端口方式启动
随着微服务架构的流行,想要启动一个微服务架构项目就要开启好多端口,有时候一台机器上部署的项目多的时候,端口资源就比较紧张了,其实有的微服务组件仅仅只是提供RPC服务,可以不用占用web启动的端口,此时 ...
- git push 报504 (因提交文件内容过大而失败的解决方案)
Enumerating objects: 60, done. Counting objects: 100% (60/60), done. Delta compression using up to 4 ...
- TP5 使用验证码功能
工作中后台开发使用的是 TP5,但是对语法不是很熟悉,总是看着手册写代码.当时做 Java 的时候也是这样,很多语法需要靠百度.不是不能写代码,但是这样的效率感觉不高,没有行云流水的感觉,要是能有聊天 ...
- select下拉框option的样式修改
select原样式: 进行样式修改后的样式: 附上修改代码: //select外面必须包裹一个div,用来覆盖select原有的样式<div class="option"&g ...
- webpack-实用的2个配置
①:运行npm run dev 后自动打开浏览器 首先找到config里面的index.js文件,然后打开找到autoOpenBrowser属性,把默认的false改为true即可 ②:简写路径 ...
- javascript:警告(alert 消息对话框),确认(confirm 消息对话框)
原文:https://blog.csdn.net/u012110719/article/details/41926315
