project 项目
generate 生成
parsing 语法分析;剖析
argument 争论/论点
argument 复数
multiple 倍数,多个
Decorator 装饰器
recursion 递归
rang(2)或rang(0,2) | 0,1包头不包尾 |
---|---|
randint(1,3)必须两参数 | 1,2,3包头包尾 |
格式 :
def 函数名([参数,参数...]):
函数体 (重复的代码)
import random
def generate_random():
for i in range(3):
ran = random.randint(1,100)
print('第{}次的值为:{}'.format(i,ran))
print (generate_random) #
gene =generate_random()
print('___'*22)
print(gene)
generate_random()
# 第0次的值为:67
# 第1次的值为:1
# 第2次的值为:56
# None
__________________
第0次的值为:67
第1次的值为:29
第2次的值为:99
import random
def generate_random(k): # 形参
for i in range(k):
ran = random.randint(1,100)
print('第{}次的值为:{}'.format(i+1,ran))
print (generate_random)
# 调用
generate_random(5) # 实参:5
def add (*args):
#print(args) # 空元组 ()
sum = 0
if len(args)>0:
for i in args:
sum+=1
print('sum的值是',sum)
else:
print('没有元素进行计算')
# 涉及拆包装包操作
def add(a,b=1,c=10):
re = a+b+c
print(re)
add(1) # 12
add(1,3)# 14
add(1,6)#17
add(1,c=6)#8
def bb(a,b,*c,**d): # a,b为必不可少项,后面两个参数为可选
print(a,b,c,d)
bb(1,2) # 1 2 () {}
bb(1,2,3,4) # 1 2 (3,4) {}
bb(1,2,x=3,y=4) # 1 2 () {'x':3,'y':4}
bb(1,2,3,x=4) # 1 2 (3,) {'x':4}
def add(a,b):
result = a+b
return result
z = add(3,4)
print(z)
def a():
print('aaaa')
def b():
a()
print('bbbb')
b() #aaaa
#bbbb
import random
def generate_checkcode(n):
s = '0987654321qwertyuioplkjhgfdsamnbvcxzZXCVBNMLKJHGFDSAPOIUYTREWQ'
code=''
for i in range(n):
ran =random.randint(0,len(s)-1)
code += s[ran]
return code
def login():
username = input('请输入用户名')
password = input('请输入密码')
code = generate_checkcode(5)
print('验证码是:',code)
codel = input('请输入验证码:')
if code.lower()==codel.lower():
if username=='aa'and password=='bb':
print('bingo')
else:
print('用户名/密码有误')
else:
print('验证码有误')
login()
- 内部函数 | 可以访问外部的变量 |
---|---|
- 内部函数 | 可以修改外部函数的可变类型的变量比如 list, |
- global | 内部 修改全局中不可变时要声明 |
- nonlocal | 内部修改外部函数的不可变变量时要声明 |
- locals() | 可以通过{key:value}查看函数内有什么元素和内函数 |
- global() | 可以通过{ }查看全局变量,注意里面会有一些系统的键值对 |
def AA():
count=[0]
def BB():
count[0]=count[0]+1
print('第{}次访问'.format(count[0]))
return BB
a =AA()
a() #第1次访问
a() #第2次访问
a() #第3次访问
要用ff : 就是调用iner2的return的值
否则就是f直接调用func函数的返回值
def func(number):
a = 100
def inner_func():
nonlocal a
nonlocal number
number +=1
for i in range(number):
a +=1
print('修改后的a:',a)
return inner_func
f = func(5)
f() # 修改后的a: 106
a = 50
f1 = func(a)
print(f1) # .inner_func at 0x000001A6233C6D38>
f1() # 修改后的a: 151
def test ():
print('------test-----')
t =test
print(t) #
def func(f):
print(f) # 此时f就是t也就是test的地址
f() # f既然是test,那这就是test()调用print------test-----
print('------------------>func') # func函数的print------------------>func
func(t) # 完成了从17行定义函数,19行调用函数名,21行函数名作为参数进入func函数
def house(fun):
def add():
fun()
print('我们是一家装修大品牌,我们正为新房子提供装修服务 ' )
print('-------正在装修-----')
print('装饰完成:拎包入住')
return add
def house_last():
print('这是一个新的房子,毛坯房')
print('我需要一个装饰的公司对新房进行装饰')
print('这可怎么办,还需要装修才能入住,我得找一个修饰的公司')
house_last()
@house
def house_last1():
print('_______________________________________________')
print('这是一个新的房子,毛坯房')
print('我找了一个装饰的公司对新房进行装饰')
house_last1()
函数的作用域
L-E-G-B
L: local 本地
E:enclosing 嵌套
G:global 全局
B:built-in 内置
匿名函数:lambda简化书写
格式 lambda 参数1,参数2… : 运算
s = lambda a,b :a+b #s去接收,s就是一个函数地址
print(s) # at 0x000002326DE98048>
print(s(3,1)) #4
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
reduce(function, iterable[, initializer])函数必须是有两个参数的
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。