#1.怎么给函数编写文档 '''将注释放在def语句下面,(单引号,双引号,三引号都可以),在通过func.__doc__查看文档''' def double(a): '''返回两倍''' a *= 2 return a print(double.__doc__) print(double(2)) #返回两倍 #4 #2.参数和返回值注解 '''代码执行时,注解不会产生任何影响,参数的注解使用:接在参数后面,如果是默认参数,接在参数和=之间,返回值的注解在()外接->,表示注解,可以使用func.__annotations__查看类型''' def function(test:str,max_len:'int>0'=80) ->str: test = test + str(max_len) return test print(function('adc',10)) print(function.__annotations__) #adc10 #{'test': <class 'str'>, 'max_len': 'int>0', 'return': <class 'str'>} #3.改变闭包中对数字,字符串,元祖等不可变元素更新 '''闭包中定义的变量都是局部变量,局部变量改变会报错''' def make_averager(): count = 0 total = 0 def averager (new_value): count += 1 total += new_value return total / count return averager avg = make_averager() avg(10) #UnboundLocalError: local variable 'count' referenced before assignment '''使用nonlocal声明变量即可改变''' def make_averager(): count = 0 total = 0 def averager (new_value): nonlocal count,total count += 1 total += new_value return total / count return averager avg = make_averager() print(avg(10)) #10.0 #4.利用lambda表达式排序 a = [[6,5],[3,7],[2,8]] a1 = sorted(a,key= lambda x:x[0],reverse=False) a2 = sorted(a,key= lambda x:x[-1],reverse=True) print(a1) print(a2) #[[2, 8], [3, 7], [6, 5]] #[[2, 8], [3, 7], [6, 5]]
URL=‘https://blog.csdn.net/qq_42659468/article/details/108489761?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162651113416780274120777%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162651113416780274120777&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-108489761.first_rank_v2_pc_rank_v29&utm_term=%E6%B1%89%E8%AF%BA%E5%A1%94python&spm=1018.2226.3001.4187’
'''思路:可以看上方的网址链接,讲述十分清楚,本质是递归''' def Han_Nou_Ta(n:int,i:str,j:str,k:str): if n == 1: print(i,'->',k) return Han_Nou_Ta(n-1,i,k,j) Han_Nou_Ta(1,i,j,k) Han_Nou_Ta(n-1,j,i,k) Han_Nou_Ta(3,'1','2','3') #64太多不好看结果,设为3 1 -> 3 1 -> 2 3 -> 2 1 -> 3 2 -> 1 2 -> 3 1 -> 3
#1.类属性就是在类中,实例之外定义的属性;实例属性就是在实例中定义的属性 #2.在方式前加上两个__,即可定义私有方法 class Person: def __name(self): print('私有方法 ') #3.myfunc方法中没用指定self参数 class C: def myfunc(self): print('hello!') c = C() c.myfunc() #hello! #4.代码如下 class Ticket(): #定义类属性 sale = 100 sale_child = 50 def __init__(self,x,y): self.x = x self.y = y def workday(self): cost = 100*self.x+50*self.y print('%d个成人%d个小孩花费%d元' %(self.x,self.y,cost)) def dayoff(self): cost = (100*self.x+50*self.y)*1.2 print('%d个成人%d个小孩花费%d元' %(self.x,self.y,cost)) t = Ticket(2,1) t.workday() #2个成人1个小孩花费250元
#1.__new__:__new__ 方法主要是当你继承一些不可变的 class 时(比如 int, str, tuple ), 提供给你一个自定义这些类的实例化过程的途径 #2.__init__:构造器,当一个实例被创建的时候调用的初始化方法 #3.__str__:__str__(self) 的返回结果可读性强。也就是说, __str__ 的意义是得到便于人们阅读的信息。 #4.__rstr__:未找到相应方法 #__repr__(self)相较于__str__的返回结果应更准确。怎么说, __repr__ 存在的目的在于调试,便于开发者使用 #5.__getitem__:__getitem__(self, key) 定义获取容器中元素的行为,相当于 self[key] #6.__setitem__:__setitem__(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value
import time class Mytime(object): def __init__(self): self.__info = '未开始计时!' self.__begin = None self.__end = None self.__jg = 0 def __str__(self): return self.__info def __repr__(self): return self.__info def start(self): print('计时开始...') self.__begin = time.localtime() def stop(self): if not self.__begin: print('提示:请先调用start()开始计时!') return self.__end = time.localtime() self.__jg = time.mktime(self.__end) - time.mktime(self.__begin) self.__info = '共运行了%d秒' % self.__jg print('计时结束!') return self.__jg def __add__(self, other): return '共运行了%d秒' % (other.__jg + self.__jg) t1 = Mytime() print(t1) #未开始计时! t1.stop() #提示:请先调用start()开始计时! t1.start() #计时开始... time.sleep(5) t1.stop() #计时结束! print(t1) #共运行了5秒 t2 = Mytime() t2.start() time.sleep(7) t2.stop() print(t2) print(t1+t2) ''' 未开始计时! 提示:请先调用start()开始计时! 计时开始... 计时结束! 共运行了5秒 计时开始... 计时结束! 共运行了7秒 共运行了12秒 '''
#1.用all方法,可以查出模块下不带_的方法可以直接调用 import random print(random.__all__) #['Random', 'SystemRandom', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate'] #2.查询Collection模块的基础用法 '''思路:最常见的元素自然就是出现次数最多的元素了,所以需要对每个出现的元素进行计数 Collections模块中的Counter方法 就是计数器 ''' from collections import Counter language = ['PHP', 'PHP', 'Python', 'PHP', 'Python', 'JS', 'Python', 'Python','PHP', 'Python'] c = Counter(language) c = c.most_common(1)[0][0] print(c) #Python '''注解:Counter下的most_common([n]),生成Counter对象后,有种情况是键值对太多,我们只在乎出现频率最高的几项,可以使用该方法,参数n代表前n个最常出现的键值对。c.most_common(1)的结果是[('Python', 5)]'''
'''思路:重点处理时区的问题,可以使用正则表达式匹配,也可以使用字符串的切片''' import datetime def to_timestamp(dt_str:str, tz_str:str): tz = tz_str.split('C')[1] tz = tz.split(':')[0] tz = 0 - int(tz) time = datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(hours = tz) time = time.timestamp() print(time) to_timestamp('2020-6-1 08:10:30','UTC+5:00') to_timestamp('2020-6-1 08:10:30','UTC-9:00')
'''思路:首先得到每个year的1月1号是周几,再计算第一个周末是几号,再加7循环即可得到所有的周末''' from datetime import date, timedelta def all_sundays(year): dt = date(year, 1, 1) #得到1月1号 dt += timedelta(days = 6 - dt.weekday()) #应该是dt.weekday()+1再用7- while dt.year == year: yield dt dt += timedelta(days = 7) for s in all_sundays(2021): print(s) #2021-01-03 #2021-01-10 #2021-01-17
#1.可以指定编码格式,'gbk'中文格式。 f = open('Chinese.txt','r',encoding='gbk') #2. def longest_word(filename): with open(filename, 'r') as infile: words = infile.read().split() max_len = len(max(words, key=len)) return [word for word in words if len(word) == max_len] print(longest_word('res/test.txt'))
格式,'gbk’中文格式。
f = open(‘Chinese.txt’,‘r’,encoding=‘gbk’)
#2.
def longest_word(filename):
with open(filename, ‘r’) as infile:
words = infile.read().split()
max_len = len(max(words, key=len))
return [word for word in words if len(word) == max_len]
print(longest_word(‘res/test.txt’))