Python例子,python经典实例

  Python例子,python经典实例

  人生苦短,我用Python

  大家好。今天整理了60个Python例子,以后很难。你可以使用它们,并与你分享。记得收藏,喜欢,关注。

  1.数字1求绝对值的绝对值或复数的模。

  在[1]: abs(-6)

  Out[1]: 62十进制转换为二进制转换:

  在[2]中:纸盒(10)

  Out[2]: 0b1010 十进制转换为八进制:

  在[3]:10月(9)

  Out[3]: 0o11 十进制转换为十六进制:

  英寸[4]:十六进制(15)

  Out[4]: 0xf3个ASCII字符,对应于从ASCII转换而来的十进制整数。

  在[1]中:chr(65)

  Out[1]: A 检查对应于ASCII字符的十进制数

  在[1]中:顺序( A )

  Out[1]: 654所有元素都为真。检查所有元素是否为真,返回真,否则返回假。

  在[5]:所有([1,0,3,6])

  Out[5]: FalseIn [6]: all([1,2,3])

  Out[6]: True5至少一个元素为True。检查至少有一个元素为真并返回真,否则返回假。

  在[7]中:任何([0,0,0,[]])

  Out[7]: FalseIn [8]: any([0,0,1])

  Out[8]: True6判断真假来检验一个物体的真假。

  In [9]: bool([0,0,0])

  Out[9]:真

  In [10]: bool([])

  Out[10]:假

  在[11]中:布尔([1,0,1])

  Out[11]: True7创建一个复数创建一个复数

  在[1]中:复数(1,2)

  Out[1]: (1 2j)8分别取商和余数。

  在[1]中:divmod(10,3)

  Out[1]: (3,1)9转换为浮点类型将整数或数字字符串转换为浮点数。

  在[1]中:浮动(3)

  Out[1]: 3.0如果不能转换成浮点数,会报错值:

  In [2]: float(a )

  # valueError:无法将string转换为float:“a”10被转换为integer int (x,base=10),x可以是字符串或数值。将x转换为普通整数。如果参数是字符串,它可能包含符号和小数点。如果超出普通整数的表示范围,则返回长整数。

  In [1]: int(12 ,16)

  out[1]:1811幂基数的exp幂,如果mod给,取余数。

  在[1]中:幂(3,2,4)

  Out[1]: 112舍入,ndigits代表小数点后保留几个数字:

  在[11]: round(10.0222222,3)

  Out[11]: 10.022

  在[12]: round(10.05,1)

  Out[12]: 10.113链式比较i=3

  print(1 i 3) # False

  Print(1 i=3) # True II。字符串14字符串到字节字符串到字节类型

  在[12]: s=苹果

  In [13]:字节(s,编码=utf-8 )

  Out[13]: bapple15任何对象在[14]中都被转换成一个字符串:i=100

  在[15]中:str(i)

  Out[15]: 100

  在[16]:字符串([])

  Out[16]: []

  In [17]: str(tuple())

  Out[17]: ()16执行字符串表示的代码将字符串编译成python可以识别或执行的代码,或者将文本作为字符串读取然后编译。

  In [1]: s=print(helloworld )

  In [2]: r=编译(s, string , exec )

  在[3]中:r

  out[3]:0x 0000000005 de 75d 0处的代码对象模块,文件“字符串”,第1行

  在[4]中:执行(r)

  Helloworld17计算表达式将字符串str计算为有效表达式,并返回计算结果以取出字符串的内容。

  In [1]: s=1 3 5

  .评估

  .

  Out[1]: 918 string格式化打印格式字符串,format(value,format_spec)本质上是调用value的__format__(format_spec)方法。

  在[1]中:打印(我是{0},年龄{1})。格式( tom ,18))

  我是汤姆,今年18岁

  第三,函数19用于排序排序函数:

  在[1]中:a=[1,4,2,3,1]

  在[2]中:已排序(a,反向=真)

  输出[2]: [4,3,2,1,1]

  在[3]: a=[{ 姓名:小明,年龄:18,性别:男 },{ 姓名:

  .小红,年龄:20,性别:女 }]

  In [4]:已排序(a,key=lambda x: x[age],reverse=False)

  Out[4]:

  [{ 姓名:小明,年龄:18,性别:男 },

  { 姓名:小红,年龄:20,性别:女 }] 20 Sum函数Sum:

  在[181]中:a=[1,4,2,3,1]

  在[182]中:总和(a)

  Out[182]: 11

  In [185]: sum(a,10)# sum的初始值是10

  Out[185]: 2121非局部用于嵌入式函数。函数嵌套中经常使用关键字nonlocal将变量I声明为非局部变量;如果未声明,i=1表示I是函数包装中的局部变量。因为i=1是引用时没有声明I,所以会报错未引用变量。

  定义例外(f):

  i=0

  t1=time.time()

  def包装():

  尝试:

  f()

  例外情况为e:

  非局部I

  i=1

  print(f{e.args[0]}: {i} )

  t2=time.time()

  如果i==n:

  print(f 花费时间:{round(t2-t1,2)} )

  Return wrapper22 global声明全局变量。回答为什么要有全球第一。一个变量被多个函数引用,您希望所有函数共享全局变量。有的伙伴可能觉得这不简单,这样写:

  def f():

  打印(一)

  def g():

  打印(一)

  及格

  f()

  G()f和G两个函数都可以共享变量I,程序也没有报错,所以还是不明白为什么要用global。

  然而,如果我想有一个增加I的函数,像这样:

  def h():

  i=1

  h()此时执行程序,砰,出现错误!引发了异常:UnboundLocalError。原来,编译器在解释i=1时,会将I解析为函数h()中的局部变量。很明显,在这个函数中,编译器找不到变量I的定义,所以会报错。

  Global就是为了解决这个问题而提出的。在函数H中,编译器被明确告知I是一个全局变量,然后编译器会在函数外寻找I的定义。执行i=1后,I仍然是全局变量,值增加1:

  i=0

  def h():

  全球I

  i=1

  h()

  Print(i)23交换两个元素def swap(a,b):

  返回b,a

  Print(swap(1,0))24操作数函数对象In [31]: def f():

  .打印(“我是f”)

  .

  在[32]: def g():

  .打印(“我是g”)

  .

  在[33]: [f,g][1]()

  I m g创建一个函数对象列表,可以根据你要调用的索引统一调用。

  25生成逆序列表(range (10,-1,-1)) # [10,9,8,7,6,5,4,3,2,1,0]当第三个参数为负时,表示从第一个参数向第二个参数递减(不包括此边界)

  26函数的五类参数示例python五类参数:位置参数、关键字参数、默认参数、变量位置或关键字参数。

  def f(a,*b,c=10,**d):

  Print (f a: {a},b: {b},c: {c},d: {d} )默认参数c不能位于变量关键字参数d之后.

  调用f:

  在[10]: f(1,2,5,宽度=10,高度=20)

  A: 1,B: (2,5),C: 10,D: {width: 10, height: 20}可变位置形参B在其实际实参后解析为tuple (2,5);c取默认值10;d被解析成字典。

  再次调用f:

  在[11]中:f(a=1,c=12)

  A:1,b:(),c:12,d:{}a=1。传入时a是关键字参数,B和D都没有传入值。c作为12而不是默认值传入。

  注意参数A,不是f(1)就是f(a=1)。它的可读性比第一种要好。建议使用f(a=1)。如果你想强制使用f(a=1),你需要在它前面加一个星号:

  def f(*,a,**b):

  Print(fa:{a},b:{b} )调用f(1)时,将报告一个错误:typeerror: f()接受0个位置参数,但给出了1个。

  只有f(a=1)才可以。

  说明前面的*起作用了,变成了只能传入的关键字参数。那么如何检查这个参数的类型呢?借助python的inspect模块:

  In [22]:对于名称,val in signature(f). parameters . items():

  .打印(姓名、价值、种类)

  .

  仅关键字

  B VAR_KEYWORD可以看出参数A的类型是KEYWORD_ONLY,也就是说它只是一个关键字参数。

  然而,如果f定义为:

  def f(a,*b):

  Print(fa:{a},b:{b} )视图参数类型:

  In [24]:对于名称,val in signature(f). parameters . items():

  .打印(姓名、价值、种类)

  .

  位置关键字

  B VAR_POSITIONAL可以看出,参数A可以是位置参数,也可以是关键字参数。

  27使用slice对象生成关于cake cake1的序列:

  In [1]: cake1=list(范围(5,0,-1))

  在[2]中:b=cake1[1:10:2]

  在[3]: b

  输出[3]: [4,2]

  在[4]中:蛋糕1

  Out[4]: [5,4,3,2,1]生成另一个序列:

  In [5]:从random import randint

  .cake2=[randint(1,100) for _ in range(100)]

  .#同样以2为间隔剪切前10个元素得到切片d。

  .d=cake2[1:10:2]

  在[6]: d

  Out[6]: [75,33,63,93,15]你看,我们用同样的切割方法分别切了两个cake1,cake2,Cake2。后来我们发现这种切割方式极其经典,我们用它来切割更多的容器物体。

  那么,为什么不把这种切割方法封装成一个对象呢?这就是切片对象。

  定义一个slice对象极其简单,比如将上面的slice方法定义为一个slice对象:

  perfect_cake_slice_way=slice(1,10,2)

  #切蛋糕1

  cake 1 _ slice=cake 1[完美蛋糕_切片方式]

  cake 2 _ slice=cake 2[完美蛋糕_切片方式]

  在[11]: cake1_slice

  输出[11]: [4,2]

  在[12]: cake2_slice

  Out[12]: [75,33,63,93,15]与上述结果一致。

  对于逆序切片,切片对象同样可行:

  a=[1,3,5,7,9,0,3,5,7]

  a_=a[5:1:-1]

  named_slice=slice(5,1,-1)

  a_slice=a[named_slice]

  在[14]: a_

  输出[14]: [0,9,7,5]

  在[15]: a_slice中

  Out[15]: [0,9,7,5]频繁使用同一个片的操作可以通过使用slice对象来提取。重用还可以提高代码的可读性。

  28 lambda函数的动画演示有些读者反映Lambda函数用处不大,就问我能不能解释一下。

  例如,找到下面的lambda函数:

  def max _ len(*列表):

  Max (* lists,key=lambda v: len (v))有两个疑惑:

  参数v的值?lambda函数有返回值吗?如果有,返回值是多少?调用上面的函数找到下面三个最长的列表:

  r=max_len([1,2,3]、[4,5,6,7]、[8])

  较长的打印列表(f 是{r} )程序的完整运行过程,动画演示如下:

  结论:

  参数v的可能值是*lists,它是tuple的一个元素。lambda函数的返回值等于lambda v冒号后表达式的返回值。第四,数据结构29被转换成字典以创建数据字典。

  In [1]: dict()

  Out[1]: {}

  In [2]: dict(a=a ,b=b )

  Out[2]: {a: a , b: b}

  In [3]: dict(zip([a , b],[1,2]))

  Out[3]: {a: 1, b: 2}

  In [4]: dict([(a ,1),( b ,2)])

  Out[4]: {a: 1, b: 2}30冻结集合以创建不可修改的集合。

  在[1]中:frozenset([1,1,3,2,3])

  Out[1]: frozenset({1,2,3})没有类似set的add和pop方法,因为它不能被修改。

  31当它被转换成集合类型时返回一个集合对象。集合中不允许有重复的元素:

  在[159]中:a=[1,4,2,3,1]

  在[160]中:设置(a)

  Out[160]: {1,2,3,4}32 to slice对象类slice(start,stop[,step])

  返回一个slice对象,表示由range(start,stop,step)指定的索引集,这使得代码具有可读性和可维护性。

  在[1]中:a=[1,4,2,3,1]

  In [2]: my_slice_meaning=slice(0,5,2)

  在[3]:一个[我的_切片_含义]

  Out[3]: [1,2,1]33 tuple tuple()把一个对象变成一个不可变的序列类型。

  在[16]: i_am_list=[1,3,5]

  在[17]中:i_am_tuple=tuple(i_am_list)

  在[18]中:我是元组

  Out[18]: (1,3,5)五、类和对象34是否可调用检查对象是否可调用。

  In [1]:可调用(str)

  Out[1]:真

  In [2]: callable(int)

  Out[2]: TrueIn [18]:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  .

  In [19]:晓明=学生( 001 ,晓明)

  In [20]:可调用(小明)

  Out[20]: False如果可以调用晓明(),需要重写Student类的__call__方法:

  In [1]:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  .def __call__(self):

  .打印(“我可以被调用”)

  .打印(f 我的名字是{self.name} )

  .

  在[2]中:t=学生( 001 ,小明)

  在[3]中:t()

  我可以被称为

  我的名字是小明35 ascii展示对象调用对象的__repr__方法,获得该方法的返回值,如下例子返回值为字符串

  班级学生():

  def __init__(self,id,name):

  self.id=id

  self.name=name

  def __repr__(self):

  return id= self.id ,name= self.name调用:

  晓明=学生(id=1 ,名称=晓明)

  小明

  id=1,姓名=小明

  ascii(晓明)

  id=1,名称=晓明 36类方法分类方法装饰器对应的函数不需要实例化,不需要自我参数,但第一个参数需要是表示自身类的清屏参数,可以来调用类的属性,类的方法,实例化对象等。

  在[1]中:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  .@classmethod

  .定义女(cls):

  .打印(cls)37动态删除属性删除对象的属性

  In [1]: delattr(小明, id )

  In [2]: hasattr(小明, id )

  Out[2]: False38一键查看对象所有方法不带参数时返回当前范围内的变量、方法和定义的类型列表;带参数时返回参数的属性,方法列表。

  在[96]: dir(小明)

  Out[96]:

  [__class__ ,

  __delattr__ ,

  __dict__ ,

  __dir__ ,

  __doc__ ,

  __eq__ ,

  __format__ ,

  __ge__ ,

  __getattribute__ ,

  __gt__ ,

  __hash__ ,

  __init__ ,

  __init_subclass__ ,

  __le__ ,

  __lt__ ,

  __模块_ _ ,

  __ne__ ,

  __new__ ,

  __reduce__ ,

  __reduce_ex__ ,

  __repr__ ,

  __setattr__ ,

  __sizeof__ ,

  __str__ ,

  __subclasshook__ ,

  __weakref__ ,

  name]39动态获取对象属性获取对象的属性

  在[1]中:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  在[2]中:晓明=学生(id=001 ,名称=晓明)

  In [3]: getattr(小明,姓名)#获取小明这个实例的名字属性值

  out[3]:小明40对象是否有这个属性在[1]中:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  在[2]中:晓明=学生(id=001 ,名称=晓明)

  在[3]中:hasattr(小明,名)

  Out[3]:真

  在[4]: hasattr(小明,地址)

  Out[4]: False41对象门牌号返回对象的内存地址

  在[1]: id(小明)

  Out[1]: 9823420842是实例判断_object_是否为类_classinfo_的实例,是返回真实的

  在[1]中:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  在[2]中:晓明=学生(id=001 ,名称=晓明)

  In [3]: isinstance(小明,学生)

  Out[3]: True43父子关系鉴定在[1]:班级本科(学生):

  .定义学习类(自我):

  .通过

  .定义注意力活动(自我):

  .通过

  In [2]: issubclass(本科生,学生)

  Out[2]:真

  In [3]: issubclass(object,Student)

  Out[3]:假

  In [4]: issubclass(学生,对象)

  Out[4]:真如果班级是班级信息表元组中某个元素的子类,也会返回真实的

  In [1]: issubclass(int,(int,float))

  Out[1]: True44所有对象之根目标是所有类的基类

  In [1]: o=object()

  在[2]中:键入(o)

  输出[2]:对象45创建属性的两种方式返回财产属性,典型的用法:

  C类:

  def __init__(self):

  自我. x=无

  def getx(self):

  回归自我. x

  定义设置(自身,值):

  自我. x=值

  定义delx(自身):

  德尔赛尔夫. x

  # 使用财产类创建财产属性

  x=property(getx,setx,delx,’我是x 属性。)使用大蟒装饰器,实现与上完全一样的效果代码:

  C类:

  def __init__(self):

  自我. x=无

  @属性

  定义x(自身):

  回归自我。_x

  @x.setter

  定义x(自身,值):

  自我。_x=值

  @x.deleter

  定义x(自身):

  德尔赛尔夫。_x46查看对象类型类类型(名称、基础、字典)

  当传入一个参数时,返回对象的类型:

  In [1]:班级学生():

  .def __init__(self,id,name):

  .self.id=id

  .self.name=name

  .def __repr__(self):

  .return id= self.id ,name= self.name

  .

  In [2]:晓明=学生(id=001 ,name=晓明)

  在[3]中:键入(小明)

  Out[3]: __main__。学生

  在[4]中:键入(tuple())

  out[4]:Tuple 47元的小平、小红、张晓都是学生,这几个群体叫学生。

  使用关键字class定义Python类的常用方法

  [36]:班级学生(对象):

  .关晓明、小红、张晓都是该类的实例,然后:

  晓明=学生()

  小红=学生()

  创建张晓=学生()后,学生类由小明的__class__属性返回。

  在[38]:小明。__class__

  Out[38]: __main__。问题是学生类有__class__属性。如果是,返回什么?

  在[39]:小明。__class__。__class__

  Out[39]:键入Wow,程序没有报告错误,并返回type

  那么,我们来猜猜:学生类,类型就是类型。

  换句话说,学生类是一个对象,它的类型是type。

  所以Python中的一切都是对象,类也是。

  在Python中,描述学生类的类称为元类。

  按照这个逻辑扩展,描述元类的类叫做:_ metaclass _,开个玩笑~描述元类的类也叫元类。

  聪明的朋友会问,既然学生类可以创建实例,那么类型类也可以创建实例吗?如果是这样,它创建的实例称为类。你们真聪明!

  顺便说一下,type类必须能够创建实例,比如Student类。

  In [40]: Student=type(Student ,(),{})

  [41]:学生

  Out[41]: __main__。Student它与用class关键字创建的student类完全相同。

  Python的类,因为又是对象,所以类似于小明和小红的对象操作。支持:

  复制赋值在[43]中添加属性作为函数参数:Student mirror=Student # class direct赋值# class direct赋值

  in[44]:student . class _ property= class _ property #添加一个类属性

  In [46]: hasattr(学生, class_property )

  Out[46]:真元类,确实没用那么多。也许你先知道这些,就能应付一些场合。甚至Python的领军人物Tim Peters也说过:

  “元类是非常神奇的,99%的用户根本不用担心它。

  不及物动词工具48枚举对象并返回可枚举对象。这个对象的next()方法将返回一个元组。

  In [1]: s=[a , b , c]

  .对于枚举(s,1)中的I,v:

  .打印(一、五)

  .

  1 a

  2 b

  [1]中视图变量的3 c49字节:导入系统

  In [2]: a={a:1, b:2.0}

  In [3]: sys.getsizeof(a) #占用240个字节

  Out[3]: 24050 Filter在函数中设置过滤条件,迭代元素,保留返回值为True的元素:

  in[1]:fil=filter(x:x 10,[1,11,2,45,7,6,13])

  在[2]:列表(填充)

  Out[2]: [11,45,13]51返回一个对象的哈希值。值得注意的是,所有用户定义的实例都是可哈希的,而List、Dict、Set等变量对象是不可哈希的。

  在[1]:哈希(小明)

  Out[1]: 6139638

  在[2]中:哈希([1,2,3])

  # type error:unhashable type: list 52一键帮助返回对象的帮助文档。

  在[1]:帮助(小明)

  模块__main__ object中关于学生的帮助:

  班级学生(builtins.object)

  此处定义的方法:

   __init__(自己,id,姓名)

   __repr__(self)

  此处定义的数据描述符:

   __词典_ _

  实例变量字典(如果已定义)

   __weakref__

  对象的弱引用列表(如果已定义)53获取用户输入获取用户输入内容

  在[1]中:输入()

  嗜酒者互诫协会

  Out[1]: aa54使用iter(obj,sentinel)创建迭代器类型,并返回一个iterable对象,sentinel可以省略(一旦迭代到此元素,立即终止)

  在[1]中:lst=[1,3,5]

  在[2]中:对于iter(lst)中的I:

  .打印(一)

  .

  一个

  三

  5In [1]:类测试器(对象):

  .def __init__(self):

  .self.l=[1,3,2,3,4,5]

  .self.i=iter(self.l)

  .def __call__(self): #定义__call__方法的类的实例是可调用的。

  .item=next(self.i)

  .print (__call__被调用,它将返回,item)

  .退货项目

  .def __iter__(self): #支持迭代协议(即用__iter__()函数定义)

  .print (__iter__被调用!)

  .返回iter(self.l)

  在[2]中:t=TestIter()

  [3]中:t() #因为实现了__call__所以可以调用T实例。

  __call__被调用,这将返回1

  Out[3]: 1

  In [4]:对于tester()中的e:#因为实现了__iter__方法,所以可以迭代T。

  .打印(e)

  .

  __iter__被调用!

  一个

  三

  2

  三

  四

  55打开文件并返回到文件对象

  In [1]: fo=open(D:/a.txt ,mode=r ,encoding=utf-8 )

  In [2]: fo.read()

  out[2]: \ uff life没那么长,\ n我用python来玩。模式值表:

  56创建范围序列范围(stop)范围(start,stop [,step])生成一个不可变的序列:

  在[1]:范围(11)

  Out[1]:范围(0,11)

  在[2]中:范围(0,11,1)

  Out[2]: range(0,11)57逆迭代器In [1]: rev=reversed([1,4,2,3,1])

  在[2]中:对于I在rev:

  .打印(一)

  .

  一个

  三

  2

  四

  58聚合迭代器创建一个迭代器,从每个可迭代对象中聚合元素:

  在[1]中:x=[3,2,1]

  在[2]中:y=[4,5,6]

  In [3]:列表(zip(y,x))

  Out[3]: [(4,3),(5,2),(6,1)]

  在[4]中:a=范围(5)

  在[5]中:b=列表( abcde )

  在[6]: b

  Out[6]: [a , b , c , d , e]

  In [7]: [str(y) str(x) for x,y in zip(a,b)]

  Out [7]: [A0 , B1 , C2 , D3 , E4] 59运算符导入的链运算(add,sub)

  def add_or_sub(a,b,oper):

  return (add if oper== else sub)(a,b)

  Add_or_sub(1,2,-) # -160对象序列化是指将内存中的对象转换为可存储或可传输的对象的过程。很多场景,直接一个类对象,不方便传输。

  但是对象序列化的时候会更方便,因为按照惯例,接口之间的调用或者web请求一般都是通过json字符串传输的。

  实际上,类对象通常是序列化的。首先,创建一个学生类型并创建两个实例。

  班级学生():

  def __init__(self,**args):

  self.ids=args[ids]

  self.name=args[name]

  self.address=args[address]

  小明=学生(ids=1,姓名=小明,地址=北京)

  将Xiao Xiang=student (ids=2,name= Xiao Xiang ,address= Nanjing )导入到json模块中,调用dump方法,将list对象[Xiao Xiang,Xiao Xiang]序列化到文件json.txt中

  导入json

  用open(json.txt , w )作为f:

  json.dump生成的文件内容([晓明,小红],f,default=lambdaobj: obj。_ _ dict _ _,确保_ ascii=false,indent=2,sort _ keys=true)如下:

  [

  {

  地址:北京,

   ids:1,

  姓名:小明

  },

  {

  地址:南京,

   ids:2,

  姓名:小红

  }

  ]技术交流欢迎转载,收藏,有所收获。请支持!数据和代码可以从我这里获得。

  目前已开通技术交流群,群友2000多人。最好的添加笔记的方法是:兴趣来源,这样才能找到志同道合的朋友。

  方法,发送下图到微信,长按识别,后台回复:加群方法,微信搜索微信官方账号:Python学习与数据挖掘,后台回复:加群。

  转载请联系作者授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: