函数魔法,是每一个Python Magic学员所必须掌握的魔法,无论在实战还是练习中都是必不可少的,若使用大型魔法,它可使其大型魔法变得非常容易施展,省去了复杂的招式,而且以后在使用该魔法会更加轻松。
① 减少代码的重用。
② 保持一致性,易维护。
③ 可扩展性。
# def 函数名(参数): #可以不加参数,将参数加到函数内部
# 语句块
# return x #返回值,函数结束标志,可有可无
# 函数名(参数) #函数调用
对于return返回值,返回值是一个整体:
return 值=0,返回none;
return 值=1,返回object类型;
return 值>1,返回tuple元组类型。
def cals(x,y):
res = x**y
return res
c = cals(2,3)
d = cals(3,2) #位置参数顺序不同,结果不同
#e = cals(2,3,4) 多则报错
#f = cals 少则报错
print(c,d)
def cals1(x,y):
res = x**y
return res
c = cals1(x=2,y=3)
d = cals1(y=2,x=3) #参数指明不同结果不同
#e = cals1(y=2,y=3) 参数指明重复,错误
print(c,d)
def cals2(x,y=3): #默认参数y=3
res = x**y
return res
c = cals2(x=2) #未调用则使用默认参数
d = cals2(x=2,y=4) #关键字参数重新赋值
e = cals2(2,4) #位置参数重新赋值
print(c,d,e)
def cals2(x,y): #默认参数y=3
res = x**y
return res
#c = cals2(x=2,3) #关键字参数在左,位置参数在右,报错
d = cals2(2,y=4) #关键字参数在右,位置参数在左
#e = cals2(2,x=2) #位置与关键字参数重复,报错
print(d)
name = 'wxt' #全局变量
def w():
name = 'lhm' #局部变量
def q():
global name #与下面互换顺序报错PS④
name = 'love'
q()
print(name)
print(name)
w()
print(name)
name1 = [1,2,3]
def m():
n = 520
def e():
name1.append(n) #PS②
print(name1)
e()
m()
def text(x,*y): #x,只取第一个元素,*y,将后面组成列表,循环遍历输出
print(x)
print(y)
text(1,2,3,4,5)
text(1,[2,3,4,5])
text(1,*['2','3',4,5]) #列表的列表等于本身
def text(x,**y): #x,只取第一个元素,**args,将后面组成字典
print(x)
print(y)
text(1,g=2,z=3) #字典对应模式
def text(x,*y,**z): #只有这一种写法
print(x)
print(y)
print(z)
text(1,2,3,m=1,n=2)
text(1,*[2,3],**{'y':2})
def calc(n): #print(10)-->calc(5)-->print(5)-->calc(2)
print(n) #-->print(2)-->calc(1)-->print(1)
if int(n/2)==0:
return n
return calc(int(n/2))
calc(10)
#lambda 形参:处理逻辑(简单逻辑,一行搞定)
a = lambda x:x+1
b = lambda x:x in 'love'
print(a(5),b('o'))
def foo():
name = 'love'
def bar():
name = 'wxt'
def tt():
def aa():
print('lhm')
aa()
print(name)
return tt() #加括号==调用函数
return bar #不加括号==返回函数地址
print(foo,foo())#返回函数地址
ba = foo()#调用foo()函数
ba() #调用foo()函数中仅次于foo()函数的内置函数bar()
foo()() #等同于上面两行
def foo(n):
print(n)
def bar(name):
return 'I love %s' %name
foo(bar('wxt'))#先里后外
def bar():
print('from bar')
def foo():
print('from foo')
return bar
n = foo() #调用foo()函数将结果赋给n(返回值为bar()函数的函数地址)
n() #调用bar()函数
def bar1():
print('from bar1')
def bar2():
print('from bar2')
return bar1()
bar2() #调用bar()函数,其中bar2()函数中返回bar1()的调用
num = [1,2,3]
a = map(lambda x:x+1,num) #num中元素迭代到前面函数,将运行结果存入列表
print(a) #得到列表结果地址
print(list(a)) #list()获取列表的值
num1 = ['l','o','v','e']
a1 = map(lambda x:x+'520',num1)
print(a1)
print(list(a1))
num = ['005','lhm','lkm']
a = filter(lambda x:x.startswith('l'),num) #num中元素迭代到前面函数,将运行结果为True的存入列表
print(a) #得到列表结果地址
print(list(a)) #list()获取列表的值
num1 = [0,5,25,2]
a1 = filter(lambda x:x>2,num1)
print(a1)
print(list(a1))
from functools import reduce
a = reduce(lambda x,y:x+y,range(10)) #没初始化值,默认为0,0+0+1+。。。+9
b = reduce(lambda x,y:x+y,range(10),6) #初始化值,初始值为6开始,6+0+1+。。。+9
print(a,b)
a1,a2,a3 = -1,2,0
print(abs(a1),abs(a2),abs(a3))
b1 = 6
print(bin(b1),oct(b1),hex(b1))
h1 = 520
h2 = str(h1)
print(h2)
print(type(h1),type(h2))
print(bool(''),bool(None),bool(0))
print(bool(['l']),bool('abc'),bool(520))
print(all(''),all([5,2,0]),all('wxt'))
print(any([5,2,0]),any('lhm'),any(''))
name = 'wxt'
print(name.encode('utf-8')) #encode()编码
print(name.encode('utf-8').decode('utf-8')) #decode()解码,前后编码解码方式一致
print(bytes(name,encoding='utf-8'))
print(bytes(name,encoding='utf-8').decode('utf-8')) #前后编码解码方式一致
print(chr(98),ord('a'))
print(dir(list()))
print(help(list()))
print(divmod(10,3))
a = [1,2,3]
print(eval(a))
print(eval('5+7'))
a. 传入参数与传出hash长度无关,hash定长
b. 不可反推hash
c. 可检测软件是否植入木马,只能软件不变,在任何地方或情况下hash不变
m = 'love'
print(hash(m))
print(hash(m))
m = m+'wxt'
print(hash(m))
print(vars())
print(locals())
print(vars(str))
print(isinstance(1,int),isinstance(2,str))
print(globals())
print(locals())
d1 = list(zip(('w','x','t'),(5,2,0))) #前后长度相同
d2 = list(zip(('w','x','t'),(5,2,0,0,0))) #若不同,则省略后面数据
print(d1,d2) #前后对应合并
d3 = {'name':'wxt','age':19}
d4 = list(zip(d3.keys(),d3.values())) #对应合并
print(d4)
import time
print(time)
e1 = ['l','o','v','e',5,2,0]
print(reversed(e1)) #直接调用返回的是列表地址
print(list(reversed(e1))) #list()使其成为列表
f1 = 'love'
f2 = ['love',520]
print(slice(f1)) #前后None补充
print(slice(f2))
print(max([5,2,0]),min([5,2,0]))
print(pow(2,10),pow(2,10,5)) #2**10 2**10%5
g1 = [5,2,0]
print(sorted(g1))
g2 = {'a':120,'b':520,'c':666}
print(sorted(g2,key=lambda key:g2[key])) #排序出key所对应的value大小顺序
函数魔法的相关知识就简单说这些,还不赶快去学习!