python学习自动化笔记06

发布于 2021-04-29 07:33

01. 函数参数拆包

a. * 用来接受位置的不定长参数

b. ** 用来接收关键字参数的不定长参数

def func(*args, **kwargs):
print(args)
print(kwargs)


data = [11, 22, 33, 44, 55]
# 通过*对元祖拆包,只要在调用函数的时候可以用(用在函数的参数上)
func(*data)


def func1(a, b, c):
print(a)
print(b)
print(c)


data = [11, 22, 33]
# func1(*data)
# aa, bb, cc = data
# print(aa,bb,cc)

02. 函数的作用域

a. 函数的作用域: 在函数内部中定义的变量, 只有在 该函数中才能够使用

b. 局部变量: 定义在函数内部的变量叫局部变量

c. 全局变量: 直接定义在文件的变量, 叫全局变量, 在该文件中的任何地方都能够访问.

a = 100
def func():
b = 100
print(a)
print(b)
return b
res = func()

03. 在函数内部定义全局变量

# def func():
# global b # 在函数内部声明全局变量
# b = 100
#
# func()
#
#
# print(b)
# 扩展知识点
def func():
aa = 11
def func2():
nonlocal aa # 使用nonlocal声明外部函数的局部变量,可以在嵌套函数内部修改外部函数的局部变量的值
aa += 1
print(aa)

func2()
print(aa)


func()

# print(aa)

运行结果:

04. 全局变量和局部变量练习

# 变量查找过程: 由内向外去找的, 先找自身这一层作用域有没有,没有才会去外面找.

a = 100
# 如果在函数内部定义的局部变量和全局变量重名,那么最好把局部变量的定义放在该函数的最前面
def func():
a = 11
# print(a)
func()

print(a)

运行结果:

05. 常用的内置

li = [11, 34, 1, 54, 6, 88, 99]

# 获取最小值
res = min(li)
print(res)

# 获取最大值
res2 = max(li)
print(res2)

# 求和sum
res3 = sum(li)
print(res3)

06. 高级内置函数

#  enumerate:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
# 同时列出数据和数据下标,一般用在 for 循环当中
# li = [11,22,33,44]
#
# res = enumerate(li)
#
# list2 = list(res)
# print(list2)
#
#
# dic = {"a":11,"b":22}
# # print(list(dic.items()))
# eval:识别字符串中的python表达式
# s1 = "(1,2,3)"
# s2 = "[11,22,33]"
#
# print(s1, type(s1))
#
# # 识别字符串中元祖
# res11 = eval(s1)
# print(res11, type(res11))
#
# # 识别字符串中的列表
# res2 = eval(s2)
# print(res2, type(res2))
# 注意点:如果是个纯粹的字符串,那么使用eval进行转换之后就变成了一个变量名
# python = 666
# s4 = "python"
# res4 = eval(s4)
# print(res4,type(res4))
# 过滤函数:filter(参数1,参数2)
# 参数1:函数
# 参数2:待过滤的数据
# 案例 li = [11,22,33,44,1,2,3,4,5,77,2,323,90]
# 过滤所有大于33的数据
# li = (11, 22, 33, 44, 1, 2, 3, 4, 5, 77, 2, 323, 90)
#
# def func(x):
# return x > 33
#
# # 方式一
# new_list = []
# for i in li:
# if func(i):
# new_list.append(i)
#
# # 方式二
# new_list = filter(func, li)
#
#
# print(list(new_list))
# 扩展
# 匿名函数:
# new_list = filter(lambda x:x>33, li)
# zip聚合打包的函数
#
# li = [11,22,33,44]
# li2 = [111,222,333,444]
# li3 = [111111,22222,33333,44444]
#
# res5 = zip(li,li2,li3)
#
# print(list(res5))
# 案例:
users_title = ["name", "age", "gender"]

users_info = [['小明', 18, ''],
["小李", 19, ''],
["小美", 17, '']
]

# 要求:将上述数据转换为以下格式
users = [{'name': '小明', 'age': 18, 'gender': ''},
{'name': '小李', 'age': 19, 'gender': ''},
{'name': '小美', 'age': 17, 'gender': ''}]

#
new_users = []
for user in users_info:
data = zip(users_title, user)
new_users.append(dict(data))

print(new_users)

# t = ["name", "age", "gender"]
# s = ['小明', 18, '']
#
# res = zip(t,s)
# print(dict(res))
# import keyword
#
# print(keyword.kwlist)

练习:

# 第一题
def mul_table():
for i in range(1, 10):
for j in range(1, i + 1):
print('{} * {} = {:<4}'.format(j, i, i * j), end='')
print()


mul_table()


# 第二题
def count_num():
count = 0
for a in range(1, 5):
for b in range(1, 5):
for c in range(1, 5):
if a != b and c != b and a != c:
print(a, b, c)
count += 1
print('一共有{}'.format(count))


count_num()


# 第三题
def compute_number():
print('欢迎使用计算器')
a = int(input('请输入数字1:'))
b = int(input('请输入数字2:'))
print('功能提示:1】加 【2】减【3】乘 【4】除')
num = input('请选择:')
if num == '1':
return a + b
elif num == '2':
return a - b
elif num == '3':
return a * b
elif num == '4':
return a / b
else:
print('没有此选项!')


# res = compute_number()
# print(res)
# 第四题
users = [{'user': 'python23', 'password': 'lemonban'}, ]


def register():
# 注册功能
while True:
username = input('请输入新账号:') # 输入账号
for user in users: # 遍历出所有账号,判断账号是否存在
if username == user['user']:
print('该账户已存在') # 账号存在,重新输入
break
else:
password1 = input('请输入密码:') # 输入密码
password2 = input('请再次确认密码:') # 再次确认密码
if password1 != password2:
print('注册失败,两次输入的密码不一致') # 账号和密码不一致 重新输入
# continue
else:
# 账号不存在 密码不重复,则添加到账户列表中
users.append({'user': username, 'password': password2})
print('注册成功!')
break
register()

运行结果:



相关资源