函数
知识点回顾
1.集合 ( )
主要作用是:
1.去重
2.关系测试,交集\差集\并集\反向(对称)差集
2.元组 ( )
主要作用是:
1.只读列表,只有count, index 2个方法
2.如果有一些数据不想被人修改。 可以存为元组,比如身份证列表
3.字典 { }
key-value对
特性 : 无顺序,去重,查询速度比列表块多了,比list占用内存多
1.因为是hash类型,会把key hash成二进制,并放入hash表中,。。。
函数
特性:1.减少重复的代码
2.使程序变得可扩展
3.使程序变得易维护
语法 、
def say(): #调用函数
print("hellow you!")
say() #调用函数
也可以带参数
def say(x,y):
res = x*y
return res #返回函数执行结果
c = say(8,9)
print(c)
>>72
形参变量:只有在被调用时菜分配内存单位,在调用结束时,即刻释放所分配的内存单位,因此,形参只有在内部有效,函数调用结束返回主调用函数则不能再使用该形参变量
实参变量:可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参。因此应预先用赋值,输入等办法使参数获得确定值

代码如下:
实验代码:1--->>
def say():
username = input("请输入您的用户名:")
password = input("请输入密码")
_username='zcq'
_password='123456'
if username == _username and password == _password:
print('\033[34m欢迎您登陆成功\033[0m')
return True
def home():
if say() == True:
print("\033[32m登录成功,进入您的home\033[0m")
return True
else:
print('\033[33m请您重新输入\033[0m')
say()
def pay():
if home() == True:
print("\033[35m欢迎进去您的购物车\033[0m")
else:
say()
pay()
实验代码:1--->>>
def say(name,age,contry='CN',*args,**kwargs):
print('姓名',name)
print('年龄',age)
print('国家',contry)
print('自定义添加a',args)
print('自定义添加k',kwargs)
say("zcq",'23','CN','爱吃羊蝎子',时间='20161030')
print('\033[32m---------------------\033[0m')
say('cq',23,'CN','IT',uuid='gong zuo 3 old yesar',moeny='100000')
print('\033[34m---------------------\033[0m')
say(name='zcq',age='24',uuid='stuid10001',chengji='A+')
print('\033[35m---------------------\033[0m')
say(age=22,name='cq',contry='python')
>>
姓名 zcq
年龄 23
国家 CN
自定义添加a ('爱吃羊蝎子',)
自定义添加k {'时间': '20161030'}
---------------------
姓名 cq
年龄 23
国家 CN
自定义添加a ('IT',)
自定义添加k {'uuid': 'gong zuo 3 old yesar', 'moeny': '100000'}
---------------------
姓名 zcq
年龄 24
国家 CN
自定义添加a ()
自定义添加k {'chengji': 'A+', 'uuid': 'stuid10001'}
---------------------
姓名 cq
年龄 22
国家 python
自定义添加a ()
自定义添加k {}
备注:1.其中contry='CN' 这是默认参数
2.赋值的时候,是依次运行,对应位置,如果其中name赋值了一次,就不能再次赋值了,
3.所有的默认参数,都必须放在位置参数后面
4.赋值的时候可以指定参数 ,指定参数也需要放在后面
非固定参数:
若你的函数在定义时不确定用户传入多少个参数,就可以使用非固定参数
*args 会把传入的参数 变成一个元组形式: **kwargs 会把多传入的参数变成一个字典形式
全局与局部变量: 在函数中 尽量不要把局部变量声明为全局变量,
如果全局和局部变量名称一样,但是代表的意思是不同的,在内存地址也是不同
返回值:
1. 一旦你的函数经过调用并开始执行,那你函数外部的程序,就没办法在控制函数的执行过程了,
此时外部程序只能安静的等待函数的执行机结果,为啥要等待函数结果,因为外部程序要根据函数的执行结果来决定下一步怎么走。这个执行结果就是以return的形式返回给外部程序
2.return 代表着一个 函数的结束
3.return 可以返回任意数据类型
4.对于用户角度,函数可以返回任意数量的值,但对于py本身来讲,函数只能返回一个值(以元组的方式显示)
5.如果未在函数中指定return,那这个函数的返回值为None
嵌套函数:(day4会有详细内容)
def say():
name = 'zcq'
print(name)
def say2():
name = 'rch'
print(name)
say2()
say()
>>
zcq
rch
匿名函数:
def say(n,z):
return n*z
date=lambda x,y:x+y #lambda 只能做简单的运算,以及三元运算
date2=lambda x,y:x//y
print(say(8,9))
print(date(8,9))
print(date2(80,7))
>>
72
17
11
其中:lambda 只能做运行运算操作,以及三元运算
附图:

三元运算:
a = 5 b = 4 n = 10 d = a if a>10 else b print(b)
>>>三元扩展:
1.
def say(n):
return -n
data=map(lambda n:n*n if n>5 else n,range(10))
for i in data:
print(i)
>>
0
1
2
3
4
5
36
49
64
81
#备注:其中map是把每个值取出来,让函数去执行
2.
date2=map(lambda n:n*n if n>5 else say(n),range(10))
for q in date2:
print(q)
>>
0
-1
-2
-3
-4
-5
36
49
64
81
递归:(循环到999就报错,这是py3设计,防止内存溢出)
def func(n):
#print(n)
if n//2 > 0:
func(n//2)
print(n)
func(10)
附图:

高阶函数:
def add(x,y,f):
return f(x) + f(y)
res=add(3,-6,abs)
print(res)
>>
9
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
#abs求绝对值
二分查找:
1 data = [3,5,6,7,25,56,60,70,90,100] 2 def binarg(datasets,number): 3 if int(len(datasets)/2) >0: 4 middle_pos = int(len(datasets)/2) 5 if datasets[middle_pos] == number: 6 print('num',datasets[middle_pos]) 7 elif datasets[middle_pos] > number: 8 print('查询数值不在右边',datasets[0:middle_pos],datasets[middle_pos]) 9 binarg(datasets[0:middle_pos],number) 10 else: 11 print('查询数值在左边',datasets[middle_pos+1:],datasets[middle_pos]) 12 binarg(datasets[middle_pos + 1:], number) 13 else: 14 print('查询数值不在') 15 16 binarg(data,100)
内置函数:
1.反转:字符串和列表都可以
data='abc'
data=reversed(data)
for i in data:
print(i)
>>
c
b
a
2.排序:字符排序,按照ascii码表
a="chaoqun" a=sorted(a) print(a) >> ['a', 'c', 'h', 'n', 'o', 'q', 'u']
3.ZIP方法
a=[1,3,5,7,8]
b=[5,6,-5,9,10,20,60]
for i in zip(a,b):
print(i)
>>
(1, 5)
(3, 6)
(5, -5)
(7, 9)
(8, 10)
4.print(globals()) #把当前程序所在内存里的所有数据都以字典的形式打印出来
5.exec内置函数,能执行程序
6.bytes值可以用bytearray修改

浙公网安备 33010602011771号