'''def func(): print(123) def wahaha(f): f() return f qqxing = wahaha(func) #函数名可以作为函数的参数 qqxing()''' #闭包:嵌套函数,内部函数调用外部函数的变量 #def outer(): # a = 1 # def inner(): # print(a) # print(inner.__closure__) #outer() #print(outer) #def outer(): # a = 1 # def inner(): ## print(a) # return inner ##inn = outer() #inn() #import urllib #模块 from urllib.request import urlopen ''' ret = urlopen('https://www.china-agr.com/ChinaAgr').read() print(ret) def get_url(): url = ret = urlopen('https://www.china-agr.com/ChinaAgr').read() print(ret) ''' def get_url(): url = 'https://www.china-agr.com/ChinaAgr' def get(): ret = urlopen(url).read() print(ret) return get get_func = get_url() get_func() #装饰器
#装饰器形成的过程 #装饰器的作用 #原则:开放封闭原则 #装饰的固定模式 #懂技术的公司 #不懂技术 #bug import time #time.sleep(5)#让程序在执行到这个位置的时候停一会 def func(): start = time.time() print('老板好同事好大家好') end = time.time() print(end-start) func()
import time # 装饰器 def timmer(f): def inner(*args,**kwargs): start =time.time() ret = f(*args,**kwargs) end =time.time() print(end-start) return ret return inner @timmer #语法糖 @timmer= func = time(func)@装饰器的函数名被装饰的函数名 def func(): time.sleep(0.01) print('can you speak') return '新年好' ret = func() #func = timmer(func) func() print(ret ) #第一步 def func() 2 def timmer(f) 3 func =timmer(func) 赋值给 timmer(f)#f=func #4 return inner 返回给 func 调用func() 实际调用的是def inner
'''def inner()
a=1
def haha()
print(a)
return haha()
inn = outer()
inn()
'''
#def sum_func(*args):
# total = 0
# for i in args:
# total += i
# return total
#print(sum_func(1,2,3,8,23,6))
'''
读代码,回答:代码中打印出来的值a,b,c分别是什么?为什么?
a = 10 #第一步
b = 20
def test5(a,b):
print(a,b)
c = test5(b,a) #test(20,10)
print(c)
a=20
b=20
def test5(a,b):
a=3
b=5
print(a,b)
c=test5(b,a)
print(c)
'''
#写函数检查获取传入列表或元组最新的所有奇数位索引对应的元素,并将其作为新列表返回给调用者
#def number_1(l = [])
# for i in l:
# if 索引 % = 0
# 不输出
# return number1
#def func()
'''
def func(l):
return l[1::2]
print(func([1,2,3,4,5]))
'''
'''
def func(x):
return len(x)>5
print(func('abcd'))
'''
#写函数,检查传入列表的长度,如果大于2
#那么仅保留前两个长度的内容,并将新的内容返回给调用者。
'''
def inner(l =[])
for i in l:
if leng(l) > 2:
sex = print(l(0::1)
return sex
def func(l):
if len(l) >2:
return l[:2]
print(func([1,2,3,4]))
def inner(l):
if len(l) > 2:
sex = print(l(0::1)
return sex
'''
#写函数,计算传入字符串中【数字】、【字母】、【空格】以及【其他】的个数,并返回结果。
'''
def func(s):
#num = 0 #计算数字的个数
##alpha = 0#计算字符的个数
#space= 0 #空格
#other = 0 #其他
dic = {'num':0,'alpha':0,'space':0,'other':0}
for i in s:
if i.isdigit():
dic['num'] += 1
elif i.isalpha():
dic['alpha'] += 1
elif i.isspace():
dic['space'] += 1
else:
dic['other'] += 1
return dic
print(sfunc('dsgasjkdhflkjau.ssd.a.a.s.d.asd'))
#6,写函数,检查用户传入的对象(字符串、列表、元祖)
#每一个元祖是否含有空内容,并返回结果。
#
def func(x):
if type(x) is str and x:
for i in x:
if i == ' ':
return True
elif x and type(x) is list or type(x) is tuple:
for i in x:
if not i:
return True
else:
return True
print(func([1,'',2,3]))
#7写函数,检查传入字典的每一个value的长度,如果大于2,
#那么仅保留前两个长度的内容,并将新内容返回给调用者。
#dic = {"k1":"v1v1","k2":[11,22,33,44]}
#ps:字典中的value只能是字符串或列表
def func(dic):
for k in dic:
if len(dic[k]) > 2:
dic[k] = dic[k][:2]
return dic
dic = {"k1":"v1v1","k2":[11,22,33,44]}
print(dunc(dic))
#8,写函数,接收两个数字参数,返回比较大的那个数字。
def func(a,b):
if a > b:
return a
else:
return b
print(func(1,5))
#三元运算
a = 1
b = 5
c = a if a>b else b
print(c)
#变量 = 条件返回true的结果 if 条件 else 条件返回false的结果
#必须要有结果
#必须要有if 和else
#只能是简单的判断
def func(a,b)
return a if a>b esle b
#9、写函数,用户传入修改的文件名,与要修改的内容,执行的函数,完成整个文件的批量修改操作(进阶)
def func(filename,old,new):
with open(dilename,encoding='utf-8') as f,open('%s.bak'%filename,'w',encoding='utf-8')
for line in f:
if old in line:
line = line.replace(old,new)
f2.write(line)
import os
os.remove(filename)
os.rename('%s.bak'%filename,filename)
'''