#项目,包,python文件的概念
'''
项目:
包1:
------1.py
------2.py
------3.py
包2:
------1.py
------2.py
------3.py
'''

# 函数
#将重复的代码封装到函数,只要使用直接找函数,增强代码的模块化和重复利用率
'''
定义函数,格式:
def 函数名([参数,参数……])
函数体(重复的代码)
调用:函数名()
找到函数并执行函数体的内容
'''
#pychar的快捷键:
#自动格式化:ctrl+shift+f
#快速提示:alt+enter

 1 import random
 2 
 3 
 4 def generate_random():
 5     for i in range(10):
 6         ran=random.randint(1,20)
 7         print(ran)
 8 print(generate_random)
 9 
10 generate_random()
1 import random
2 def generate_random(number):  #形式参数
3     for i in range(number):
4         ran=random.randint()
5         print(ran)
6 print(generate_random)
7 #调用
8 generate_random()    #实参:具体的值

#函数参数

'''
定义一个函数,参数是:username,password
函数体:判断参数是否正确,如果正确则登录成功
'''

 1 def login (username,password):
 2     uname='lily'
 3     pwd='123'
 4     for i in range(3):
 5         if username==uname and password==pwd:
 6             print('登录成功')
 7             break
 8         else:
 9             print('登录失败')
10             username=input('输入用户名:')
11             password=input('输入密码:')
12     else:
13         print('账户锁定')
14 
15 #调用
16 username=input('输入用户名:')
17 password=input('输入密码:')
18 login(username,password)

#判断是否是某一种类型 list tuple dict
#isinstance(变量,类型关键字)

1 print(isinstance(tuple,tuple))
2 print(isinstance(2,int))

#自己封装一个函数求最大值

 1 def max(iterable):
 2     max=iterable[0]
 3     for i in iterable:
 4         if i > max:
 5             max=i
 6     print('最大值是:',max)
 7 
 8 #调用
 9 list1=[1,2,4,5,6,7]
10 max(list1)
11 
12 tuple=(33,45,7,8,)
13 max(tuple)
1 s={1,2,3,4,5,6}
2 for i in s:
3     print(i)
4 for index,i in enumerate(s):
5     print(index,i)
6 print(enumerate(s))
 1 list1=[]
 2 index=0
 3 for i in s:
 4     t1=(index,i)
 5     list1.append(t1)
 6     index+=1
 7 print(list1)
 8 
 9 for index,value in list1:
10     print(index,value)

#可变参数:参数的个数不确定

1 def add(*args):   #arguments 参数
2     print(args)      # ()  空元组
3 
4 add()
5 add(1)
6 add(1,2,3)
 1 def add(name,*args):
 2     print(args,name)
 3     sum=0
 4     if len(args)>0:
 5         for i in args:
 6             sum+=i
 7         print('%s累加和是:sum %s'%(name,sum))
 8     else:
 9         print('没有元素可计算,sum',sum)
10 
11 add('卢思道',1,2,3,4,5,6,7,8)  #先放固定参数,再放可变参数
1 #参数的默认值
2 #关键字参数:key=value
1 def add(a,b=10,c=2):   #参数b默认值:10
2     r=a+b+c
3     print(r)
4 
5 #调用
6 add(5)
7 add(8,9)  #此时9会覆盖原来b的默认值
8 add(1,c=7) 

#打印每位同学的姓名和年龄

1 students={'001':('蔡徐坤',21),'002':('王源',24),'003':('王军',34)}
2 
3 def print_boy(persons):  # persons=students
4     if isinstance(persons,dict):
5         values=persons.value()
6         for name,age in values:
7             print('{}的年龄是:{}'.format(name,age))
8 
9 print_boy('记录',students)
1 #**kwargs就说明,只要外面给函数送值,送的值就必须是key=value
2 def func(**kwargs):    # key word argument  关键字参数
3     print(kwargs)
4 
5 func()
6 func(a=1,b=2,c=3)

#函数的返回值

1 def add(a,b):
2     result=a+b
3     return result
4 print(result)

#result后面可以是一个参数,接收的时候x=add(1,2)
#return 后面也可以是多个参数,如果是多个参数则底层会将多个参数先放
#在一个元组中,将元组作为整体返回,x=add(1,2) x--->(1,2)
#接收的时候也可以是多个:return'hello','word' x,y=('hello','word')--->x='hello' y='word'

#加入购物车,判断用户是否登录

 1 import random
 2 islogin=False
 3 
 4 def add_shop(goodsName):
 5     global islogin
 6     if islogin:
 7         if goodsName:
 8             print('成功将{}加入购物车'.format(goodsName))
 9         else:
10             print('没有选择商品')
11     else:
12         answer=input('用户没有登录,是否登录用户:(yes/no)')
13         if answer=='yes':
14             username=input('输入用户名:')
15             password=input('输入密码:')
16 
17             islogin=login(username,password)
18             print('islogin',islogin)
19             
20         else:
21             print('很遗憾,不能添加任何商品')
22 
23 def login(username,password):
24     if username=='xiaoli' and password=='123':
25         print('登录成功')
26         return True
27     else:
28         print('用户名或密码有误')
29         return False
30         
31 username=input('输入用户名:')
32 password=input('输入密码:')
33 islogin=login(usrname,password)
34 
35 add_shop('三只松鼠')
 1 import random
 2 
 3 def generate_check(n):
 4     s='0987654321zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP'
 5     code=''
 6     for i in range(n):
 7         ran=random.randint(0,len(s)-1)
 8         code+=s[ran]
 9     return code
10 
11 def login():
12     username=input('输入用户名:')
13     password=input('输入密码:')
14     
15     code=generate_check(5)
16     print('验证码:',code)
17     code1=input('输入验证码:')
18 
19     if code.lower()==code1.lower():
20         if username=='xiaoli' and password=='123':
21             print('用户登录成功')
22         else:
23             print('用户名或密码输入有误')
24     else:
25         print('验证码输入有误')
26         
27 login()    

#函数知识点总结
'''
普通函数:
def 函数名(参数)
函数体

1.如何定义函数
2.调用函数
参数:
1.无参数:
def func():
pass
func()

2.有参数:
一般参数:
def func(a,b):
pass
func(1,2)

可变参数:
def func(*args,**kwargs): args单个元素,kwargs 关键字参数
pass
func()
func(1)
func(a=10

默认值:
def func(a=10):
pass
func()
func(100)

关键字参数:
func(b=89)

返回值:return
没有返回值:
def func():
print('--->')
x=func() ---------->None

有返回值:
def func():
return 'a'
x=func() ----------->x='a'


嵌套函数----->闭包------>装饰器
def func():
def wrapper();
…………
return wrapper

变量的作用域:LEGB
global nonlocal
globals() locals()

LEGB: local encloseing global built-in

装饰器:
单层装饰器:
def decorate(func):
def wrapper(*args,**kwargs):
……
return wrapper
@decorate
def house():
pass

多层装饰器:
@zhuang1
@zhuang2

装饰器带参数:
def outter(a):
def decorate(func):
def wrapper(*args,**kwargs):
……
return wrapper
return decorate

@zhuang(10)
def houe():
pass

@zhang(100):
def street():
pass


匿名函数:lambda 参数:返回值

递归函数:自己调用自己

 

作者:{admin-xiaoli}