Python复习总结(2)

萝らか妹 提交于 2019-11-28 00:16:35

SHYLearn_Python

3. 格式化输入与输出

3.1 格式化输入

a = input(<info>) a = input(repr(str)) 

3.2 格式化输出

3.2.1 print语句

print(a, b)   同行以空格隔开输出 print(a, b,s ep=',')  以逗号隔开进行输出 print(s, ewp='\n')   以换行隔开进行输出 print(name, end='!')  每个输出都要添加! print(' i love %s ' % s)  print 格式化输出 # 对字符串的每个元素进行换行输出 for item in list:     print(item)   

3.2.2 字符串方法format()

print('{0} : {1} : {2}'.format(hour, minute, second)) # 按照对齐格式化进行排列 print('{0:3},{1:5}'.format(12, 534)) :后面的内容为只等的格式,表示占位数,如果不够,在前面用空格补齐 

3.2.3 数据输出的格式类型

# a表示占位,不够,按照原长度打印,多了左侧空格补齐,小数点后面为保留几位小数,f位数据类型 print('i love %a.bf', num) - b 以二进制形式输出 - c 输出证书值对应的unicode字符 - d 以十进制形式输出数值 - e 以科学计数法形式输出 - o 以八进制形式输出 - x 以小写形式的十六进制输出 - X 以大写形式的十六进制输出 

4. 函数

4.1 函数定义及调用函数

- def funname(para1, para2,*,para3...):     函数体 # 在参数列表中使用(*),代表调用函数时,在(*)后面的参数都必须指定参数名称,如下 funname(para1, para2,para3=2...)   调用函数 - def fun(strname, age=32):   后面的参数位默认形参,默认形参必须放在后面 - 对元组和列表进行解包 def fun(*person): fun('shy','21') mylist = ['shy','21'] fun(*mylist) - 对字典进行解包定义参数及调用 def fun(**person) print('姓名',person['name'],'年纪',person['age']) fun('shy','21') mydict = {'name':'shy','age':21} fun(**mydict) 

4.2 函数类型

4.2.1 python内置函数

下图python3.8官方文档给出的内置函数库:

官方中文文档的连接:https://docs.python.org/zh-cn/3/library/functions.html

4.2.2 匿名函数与可迭代函数

  • 匿名函数
# 匿名函数 lambda para1, para2... : 表达式 r = lambda x,y:x*y  # 匿名函数与reduce函数的组合应用 reduce(fun, seq, initial)  #用序列值依次调用fun from funtools import reduce a = reduce(lambda x,y:x + y, range(1,101))  #实现求1~100的和  # 匿名函数与map函数的组合应用 map(fun, seq[,seq,])  #将seq内部的元素作为参数依次调用 t = map(lambda x:x**2,[1,2,3,4,5])  #返回一个map对象 print(list(t))   #打印值为[1,4,9,16,25] y =map(lambda x,y:x+y,[1,2,3],[4,5,6]) print(list(t))   # 打印值为[5,7,9]  # 匿名函数与filter函数的组合应用 filter(fun or none, seq)  #将序列对象依次放到fun中,如果返回true就留下 t = filter(lambda x:x%2==0, [1,2,3,4,5,6]) print(list(t))   # 打印值为[2,4,6]  
  • 可迭代函数
# 每个生成器对象会有一个__next__()方法 t = filter(lambda x:x%2==0, [1,2,3,4,5,6]) print(t.__next__())  # 打印2 print(t.__next__())  # 打印4 

4.2.3 生成器函数与工厂函数

  • 生成器函数
# 生成器与迭代器不同,迭代器的内容存在内存里,用next函数遍历,生成器用完立即销毁 def Reverse(data):     for idx in range(len(data)-1,-1,-1):         yield data[idx]   # 生成器函数用yield返回 for c in Reverse('Python'):     print(c, end = ' ')  # 打印 n o h t y P  # 生成器表达式 mylist = [x*x for x in range(3)]  # 使用生成器表达式返回一个对象 
  • 工厂函数
# 闭合函数 def wrapperfun(strname):     def recorder(age)print(strname,age)     return recorder  fun = wrapperfun('shy') fun(37)    # 打印 shy 37  # 装饰器属性:在原有的函数包一个函数,不改变原代码的基础上,添加新功能 def checkParams(fn):    # 装饰器函数     def wrapper(strname):         if isinstance(strname.(str))return fn(strname)  # 判断字符串类型         print ('error')           return     return wrapper  def wrapperfun(strname):     def recorder(age)print(strname,age)     return recorder wrapperfun2 = checkParams(wrapperfun) fun = wrapperfun('shy') fun(37)  # 打印 shy 37 fun = wrapperfun2(37)  # 输入不合法 
  • @修饰符
def checkParams(fn):    # 装饰器函数     def wrapper(strname):         if isinstance(strname.(str))return fn(strname)  # 判断字符串类型         print ('error')           return     return wrapper  @checkParams   # 使用装饰器函数对wrapperfun函数进行修饰 def wrapperfun(strname):     def recorder(age)print(strname,age)     return recorder  fun = wrapperfun('shy') fun(37)  # 打印 shy 37 fun = wrapperfun2(37)  # 输入不合法  

4.4.4 偏函数与递归函数

  • 偏函数
# 偏函数是重新定义一个函数,并指定了默认参数值 from funtools import partial partial(fun, *args, **keywords) 
  • 递归函数
# 递归函数是自己调用自己的函数,所有的函数调用都是压栈的过程,所以耗内存,栈空间有限,如果程序栈空间地址写满,程序最后会崩溃 def fun(n):     return n*fun(n-1) 

4.4.5 eval 和 exec函数

  • eval函数
# exec执行不返回结果,eval执行返回结果 dic = {} dic['b'] = 3 exec('a=4',dic) print(dic.keys())   #打印dict_keys(['a','__builtins__','b']) # 使用这两个函数第一个参数一定是可执行代码 

4.3 变量的作用域

4.3.1 global语句

# global 可以把局部声明为全局 a = 6 def func():     global a     a = 5 print(a)   # 打印5 

4.3.2 nonlocal语句

# nonlocal可以把全局往下一作用域调用 a = 6 def func():     a = 7     def nested():         nonlocal a             a+=1     nested()     print('本地:',a)   #打印 8 func() print('全局',a)  # 打印6 print(a)   # 打印5 

5. 面向对象的程序设计

5.1 类的结构

class MyClassdef __init__(self,属性):  # 构造函数         self.属性 = 属性         pass     def getname(self):         return self.name     ......  myc = MyClass(属性)   # 初始化实例对象,构造函数的属性 a = myc.getname()     # 类还具有一些内置属性 __name__   名称 __doc__  类的文档字符串 __nodule__ 类的模块 if __name__ == '__main__':  

5.2 类方法

@classmthod  # 声明为类方法,可以直接用类名进行调用,当然初始化实例对象进行调用也是正确的 def fun(cls): @staticmethod  # 等同于普通函数,只是被封装在类中,独立于整个类 def fun()  # 同上的调用方式,且参数没有限制要求 

5.3 类的私有化属性

# 私有化属性方法,在类的属性前面加双下划线,同时会提供一个私有化属性的访问函数,不可以被修改,但可以针对具体实例进行对象修改 clas MyClass:     __Occupation = 'scientist'      def __init__(sefl,name,age)def getOccupation(self):         return self.__Occupation # 使用装饰器函数实现类的私有化 clas MyClass:     __Occupation = 'scientist'      def __init__(sefl,name,age);     @property  # 装饰为属性,使类的私有化属性也可以被访问     def getOccupation(self):         return self.__Occupation 

5.4 类的继承

5.4.1 继承结构体

class DerivedClass(FatherClass1, FatherClass2)pass 
class Record:     """ A record class """     __Ocuupation = "scientist"     def __init__(self, name, age):         self.name = name         self.age = age          def showrecode(self):         print("Occupation:",self.getOccupation())          def getOccupation(self):         return self.__Occupation  class GirlRecord(Record):     """ A girlrecord class """     def showrecode(self):         Record.showrecode(self)         print("the girl:", self.name, "age:", self.age)  myc = GirlRecord("Anaa", 21) myc.showrecode() 

5.4.2 super()函数

# 保障了调用父类方法时只调用一次 class Record:     """ A record class """     __Ocuupation = "scientist"     def __init__(self, name, age):         self.name = name         self.age = age          def showrecode(self):         print("Occupation:",self.getOccupation())          def getOccupation(self):         return self.__Occupation  class GirlRecord(Record):     """ A girlrecord class """     def showrecode(self):         super().showrecode(self)         print("the girl:", self.name, "age:", self.age)  class MaleRecord(Record):     """ A girlrecord class """     def showrecode(self):         super().showrecode(self)         print("the girl:", self.name, "age:", self.age)          class ThisRecord(GirlRecord, MaleRecord):     """ A girlrecord class """     def showrecode(self):         super().showrecode(self)         print("the girl:", self.name, "age:", self.age) myc = ThisRecord("Anaa", 21) myc.showrecode() 

5.5 类相关的内置函数

  • 判断实例(isinstance)
isinstance(object, class_name) 
  • 判断字类(issubclass)
issubclass(class1, class2) 
  • 判断类实例中是否包含某一个属性(hasattr)
hasattr(object, name) 
  • 获得类实例中的某一个属性(getattr)
getattr(object, name[,default]) 
  • 设置类实例中的某一个属性值(setattr)
setattr(object, name, value) 

5.6 重载运算符

class MyClass:     """ A record class"""     def __init__(self, name, age):         self.name = name         self.age = age     def __str__(self):  # 将值转化为字符串进行输出         retrun "name:"+self.name;"age:"+str(self.age)          __repr__ = __str__  # 转化为解释器读取的形式      def __lt__(self, record):  #重载比较运算符         if self.age < record.age:             return True         else:             return False      def __add__(self, record):   #重载加号运算符         return MyClass(self.name, self.age+record.age)  myc = MyClass("A", 42) myc1 = MyClass("B", 23)  print(repr(myc))   print(myc) print(str(myc)) print(myc<myc1) print(myc+myc1) 
  • 运算符重载
 方法名                  运算符和表达式      说明 __add__(self,rhs)        self + rhs        加法 __sub__(self,rhs)        self - rhs         减法 __mul__(self,rhs)        self * rhs         乘法 __truediv__(self,rhs)    self / rhs          除法 __floordiv__(self,rhs)   self //rhs          地板除 __mod__(self,rhs)        self % rhs       取模(求余) __pow__(self,rhs)        self **rhs         幂运算 合赋值算术运算符的重载: 方法名                  运算符和表达式      说明 __iadd__(self,rhs)       self += rhs        加法 __isub__(self,rhs)       self -= rhs         减法 __imul__(self,rhs)       self *= rhs         乘法 __itruediv__(self,rhs)   self /= rhs        除法 __ifloordiv__(self,rhs)  self //=rhs        地板除 __imod__(self,rhs)       self %= rhs     取模(求余) __ipow__(self,rhs)       self **=rhs       幂运算  比较算术运算符的重载: 方法名                  运算符和表达式      说明 __lt__(self,rhs)       self < rhs        小于 __le__(self,rhs)       self <= rhs       小于等于 __gt__(self,rhs)       self > rhs        大于 __ge__(self,rhs)       self >= rhs       大于等于 __eq__(self,rhs)       self == rhs       等于 __ne__(self,rhs)       self != rhs       不等于           位运算符重载 方法名              运算符和表达式        说明 __and__(self,rhs)       self & rhs           位与 __or__(self,rhs)        self | rhs           位或 __xor__(self,rhs)       self ^ rhs           位异或  __lshift__(self,rhs)    self <<rhs           左移  __rshift__(self,rhs)    self >>rhs           右移  反向位运算符重载  方法名            运算符和表达式       说明 __and__(self,lhs)       lhs & rhs        位与 __or__(self,lhs)         lhs | rhs       位或 __xor__(self,lhs)       lhs ^ rhs        位异或 __lshift__(self,lhs)    lhs <<rhs        左移 __rshift__(self,lhs)    lhs >>rhs        右移  复合赋值位相关运算符重载 方法名              运算符和表达式          说明 __iand__(self,rhs)       self & rhs       位与 __ior__(self,rhs)        self | rhs       位或 __ixor__(self,rhs)       self ^ rhs       位异或 __ilshift__(self,rhs)    self <<rhs       左移 __irshift__(self,rhs)    self >>rhs       右移  一元运算符的重载 方法名              运算符和表达式       说明 __neg__(self)         - self           负号 __pos__(self)         + self           正号 __invert__(self)      ~ self           取反 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!