[其他]一些笔记(较乱未整理)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[其他]一些笔记(较乱未整理)相关的知识,希望对你有一定的参考价值。

   1 # type(xx)  意思为判断xx 的类型为什么, 整数为int,浮点数为float,字符为str,布尔为bool
   2 
   3 # isinstance(xx,cc) 意思为你来判断xx是否为cc类型, 如果是则返回True 不是则返回False
   4 
   5 # help(xx)  意思是请求帮助,查看xx的用法
   6 
   7 # dir(__builtins__) 查看所有的内置函数
   8 # dir(xxx)查看某某内置函数的用法 如dir(list) 查看列表的用法
   9 # import xx   调用什么模块
  10 # import os   调用操作模块
  11 # import pickle 把字符串转换数据,pickle是泡菜的意思
  12 
  13 # import timeit
  14 # timeit.__doc__  查看doc属性
  15 # dir(timeit)  如果有__all__   就说明有哪些函数是作者希望我们能调用的
  16 # timeit.__all__  查看可以在外调用的函数
  17 # form timeit import *  这样能调用的函数 只有__all__里面的函数
  18 # timeit.__file__  查看源代码所在的文件位置,以便浏览
  19 # help(timeit)  比doc详细一点,比帮助文档简单一点。
  20 
  21 # import random    
  22 # secret = random.randint(1,10) 创建1 - 10 的随机数
  23 # a = r.choice([1, 2, -1, -2]) 在其中随机选一个数字
  24 # locals()  以字典形式弹出当前所有局部变量
  25 # globals()  以字典形式弹出当前所有全局变量
  26 
  27 # >>> import easygui
  28 # >>> easygui.msgbox("我我我")    这个调用代码比较长,不推荐
  29 # ‘OK‘
  30 # >>> from easygui import*      这个调用代码有覆盖其他函数的可能,慎用
  31 # >>> msgbox("shishieryi")
  32 # ‘OK‘
  33 # >>> import easygui as c          这个推荐使用
  34 # >>> c.msgbox("gag")
  35 # ‘OK‘
  36 # import math as m     m.sqrt(ab) 开方
  37 
  38 # a.copy()  浅拷贝, 只能拷贝到浅层,如果拷贝字典,字典里有列表,列表里的内容就无法拷贝到。所以修改列表,拷贝项也会相应改变
  39 
  40 # import copy
  41 # dict2 = copy.deepcopy(dict1) 深拷贝,能拷贝到字典里的列表。 就是能细分拷贝
  42 
  43 # >>> import sys
  44 # >>> sys.path       模块存放文件夹  ,模块放在里面可以查询到
  45 # [‘‘, ‘F:\\python3.3.2\\Lib\\idlelib‘, ‘C:\\Windows\\SYSTEM32\\python33.zip‘, ‘F:\\python3.3.2\\DLLs‘, ‘F:\\python3.3.2\\lib‘, ‘F:\\python3.3.2‘, ‘F:\\python3.3.2\\lib\\site-packages‘]
  46 # >>> 
  47 # >>> sys.path.append("F:\\py")    可以添加其他路径
  48 
  49 
  50 
  51 
  52 
  53 
  54 
  55 
  56 #--------------------------------python爬虫相关内容---------------
  57 #-----------------------------------------------------------
  58 # >>> import urllib.request   网络模块
  59 # >>> urllib.request.urlopen("http://www.fishc.com")    打开制定网站,返回对象
  60 # <http.client.HTTPResponse object at 0x0000000002EBA4E0>
  61 # >>> response = urllib.request.urlopen("http://www.fishc.com")   
  62 # >>> html = response.read()     读网页对象
  63 # >>> print(html)
  64 # b‘<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.......................
  65 # ..........     特别乱,要解码才能顺序,才能按网页照搬
  66 # .......
  67 # ....
  68 # .
  69 # >>> html = html.decode("utf-8")   解码。
  70 # >>> print(html)
  71 # <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  72 
  73 #     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  74 # ........
  75 
  76 # ..........
  77 # .......
  78 # ....
  79 # .
  80 # -----------------------获取解码
  81 # import urllib.request as r
  82 # import chardet as c
  83 # 
  84 # a = input("请输入URL:")
  85 # response = r.urlopen(a).read()
  86 # b = c.detect(response)    这是一个获取解码的模块
  87 # c = b["encoding"]
  88 # print("该网页使用的编码是:",c)
  89 
  90 # -----------------------爬一张网络图片
  91 # import urllib.request as r
  92 # 
  93 # response = r.urlopen("http://placekitten.com/400/600")
  94 # cat_img = response.read()
  95 # 
  96 # 
  97 # with open("cat_400_600.jpg","wb") as f:  因为图片也是二进制组成,所以用w读写,d二进制读写来创建
  98 #     f.write(cat_img)   把获取的内容 写入到上面的文件
  99 # 
 100 # >>> response.geturl()      可以用geturl来获取url,网址
 101 # ‘http://placekitten.com/400/600‘
 102 # >>> response.info()             返回的是一个服务器信息
 103 # <http.client.HTTPMessage object at 0x0000000002CEA2B0>
 104 # >>> print(response.info())
 105 # Date: Wed, 22 Feb 2017 01:19:43 GMT
 106 # Content-Type: text/plain
 107 # Content-Length: 0
 108 # Connection: close
 109 # Set-Cookie: __cfduid=d3b173113a2894991cc087573526acf711487726383; expires=Thu, 22-Feb-18 01:19:43 GMT; path=/; domain=.placekitten.com; HttpOnly
 110 # Accept-Ranges: bytes
 111 # X-Powered-By: PleskLin
 112 # Access-Control-Allow-Origin: *
 113 # Cache-Control: public
 114 # Expires: Thu, 31 Dec 2020 20:00:00 GMT
 115 # Server: cloudflare-nginx      这是网站使用的服务器信息
 116 # CF-RAY: 334e9c8af3a72894-SJC
 117 # >>> response.getcode()    获取http的状态 ,返回200 就是正常工作
 118 # 200    
 119 
 120 #--------------------------------模块内测试的方法---------------
 121 #-----------------------------------------------------------
 122 # if __name__=="__main__"因为main是正在运行的程序自身,只有在模块自运行的时候,才能显示执行的内容,如果在调用这个模块的时候就不会运行
 123 #        xxxx 执行的内容        
 124 #--------------------------------迭代器的创建---------------
 125 #-----------------------------------------------------------
 126 # iter()  next()   __next__()
 127 # __iter__(self) return self, 只要有iter 那就是一个迭代器,它本身就是迭代器,所以返回本身
 128 
 129 #--------------------------------生成器的创建---------------
 130 #-----------------------------------------------------------
 131 # 在函数中写入yield ..   就是一个生成器,其作用可以中断函数。如果有下一个yield 则从下一个yield开始函数剩余部分。
 132 # >>> def myGen():
 133 #     print("生成器被执行!")
 134 #     yield 1
 135 #     yield 2
 136 # 
 137 #     
 138 # >>> myG = myGen()
 139 # >>> next(myG)
 140 # 生成器被执行!
 141 # 1
 142 # >>> next(myG)
 143 # 2
 144 # >>> next(myG)
 145 # Traceback (most recent call last):
 146 #   File "<pyshell#10>", line 1, in <module>
 147 #     next(myG)
 148 # StopIteration
 149 
 150 # >>> for i in myGen():
 151 #     print(i)
 152 # 
 153 #     
 154 # 生成器被执行!
 155 # 1
 156 # 2
 157 
 158 
 159 # >>> def libs():
 160 #     a = 0
 161 #     b = 1
 162 #     while True:
 163 #         a,b = b , a + b
 164 #         yield a    相当于终止返回。 所以不会一直循环。
 165 # 
 166 # >>> for each in libs():
 167 #     if each > 100:
 168 #         break
 169 #     print(each,end=" ")
 170 # 
 171 #     
 172 # 1 1 2 3 5 8 13 21 34 55 89
 173 
 174 # >>> e = (i for i in range(10))         生成器推倒式
 175 # >>> e
 176 # <generator object <genexpr> at 0x0000000002E1A2D0>
 177 # >>> next(e)
 178 # 0
 179 # >>> next(e)
 180 # 1
 181 # >>> next(e)
 182 # 2
 183 # >>> for each in e:
 184 #     print(each)
 185 # 
 186 #     
 187 # 3
 188 # 4
 189 # 5
 190 # 6
 191 # 7
 192 # 8
 193 # 9
 194 # >>> sum((i for i in range(100) if i % 2))     生成器推倒式
 195 # 2500
 196 # >>> sum(i for i in range(100) if i % 2 )
 197 # 2500
 198 # >>> 
 199 
 200 #--------------------------------创建类class---------------
 201 #-----------------------------------------------------------
 202 
 203 # class One1: # 类名  必须大写开头
 204 # 
 205 #     # 属性
 206 #     color = "green"
 207 #     weight = 10
 208 #     legs = 4
 209 #     shell = True
 210 #     mouth = "大嘴"
 211 # 
 212 #     # 方法
 213 #     def d1(xx):
 214 #         print("您调用了d1")
 215 # 
 216 #     def d2(xx):
 217 #         print("您调用了d2")
 218 # 
 219 #     def d3(xx):
 220 #         print("您调用了d3")
 221 # 
 222 #     def d4(xx):
 223 #         print("您调用了d4")
 224 # 
 225 #     def d5(xx):
 226 #         print("您调用了d5")
 227 
 228 # >>> a = One1()      调用类
 229 # >>> a.d1() 
 230 # 您调用了d1
 231 
 232 
 233 # >>> class MyLsit(list):   继承list的方法
 234 #     pass
 235 # 
 236 # >>> list2 = MyLsit()  相当于 list()
 237 # >>> list2
 238 # []
 239 
 240 # >>> list1 = list()
 241 # >>> list1
 242 # []
 243 
 244 
 245 # >>> class A:
 246 #     def fun(self):
 247 #         print("我是A")
 248 # 
 249 #         
 250 # >>> class B:
 251 #     def fun(self):
 252 #         print("我是B")
 253 # 
 254 #         
 255 # >>> a = A()
 256 # >>> b = B()
 257 # >>> a.fun()           多态的。
 258 # 我是A
 259 # >>> b.fun()
 260 # 我是B
 261 
 262 
 263 # class Name:
 264 #     na = "小甲鱼"
 265 # 
 266 #     def pr(ba):
 267 #         print(ba.na)  要用ba.na 才能引用
 268 
 269 
 270 # class Ball:
 271 #     def setName(b,x):
 272 #         b.c= x
 273 # 
 274 #     def kick(b):
 275 #         print("我叫%s,该死的,谁踢我..." % b.c)
 276 # 
 277 # # >>> a = Ball()
 278 # >>> a.setName("球A")
 279 # >>> a.kick()
 280 # 我叫球A,该死的,谁踢我...
 281 
 282 
 283 # class Ball:
 284 #     def __init__(b,x):
 285 #         b.c= x
 286 # 
 287 #     def kick(b):
 288 #         print("我叫%s,该死的,谁踢我..." % b.c)
 289 # 
 290 # >>> a = Ball("土豆")
 291 # >>> a.kick()
 292 # 我叫土豆,该死的,谁踢我...
 293 
 294 #-----------------------属性的公有和私有
 295 
 296 # class Ball():
 297 #     __name = "我是私有的"     加了双下划线就是私有属性,只有在类里面才能访问
 298 #     name1 = "我是公有的"      这个是公有属性, 在类外面一样可有访问
 299 # 
 300 #     def kick(b):
 301 #         return b.__name
 302 # >>> a = Ball()
 303 # >>> a.name1
 304 # ‘我是公有的‘
 305 # >>> a.__name
 306 # Traceback (most recent call last):         报错了
 307 #   File "<pyshell#2>", line 1, in <module>
 308 #     a.__name
 309 # AttributeError: ‘Ball‘ object has no attribute ‘__name‘
 310 # >>> a.kick()
 311 # ‘我是私有的‘
 312 # >>> a._Ball__name       访问方法。  
 313 # ‘我是私有的‘
 314 
 315 # >>> class A:
 316 #     def hello(self):
 317 #         print("正在调用父类的方法...")
 318 # 
 319 # >>> class C(A):           类的继承,如果有同名的属性或者方法,继承的时候子类会覆盖父类。
 320 #     pass              
 321 # >>> p = A()
 322 # >>> p.hello()
 323 # 正在调用父类的方法...
 324 # >>> c = A()
 325 # >>> c.hello()
 326 # 正在调用父类的方法...
 327 #-----------------------
 328 # import random as r
 329 # 
 330 # class Fish:
 331 #     def __init__(self):
 332 #         self.x = r.randint(0,10)
 333 #         self.y = r.randint(0,10)
 334 # 
 335 #     def move(self):
 336 #         self.x -= 1
 337 #         print("我的位置是",self.x,self.y)
 338 # 
 339 # class G(Fish):
 340 #     pass
 341 # 
 342 # class C(Fish):
 343 #     pass
 344 # 
 345 # class S(Fish):
 346 #     pass
 347 # 
 348 # class Sa(Fish):
 349 #     def __init__(b):  因为父类也有init 所以子类会覆盖父类,所以要调用父类的init方法
 350 #         #Fish.__init__(b)    两个作用一样
 351 #         super().__init__()  两个作用一样
 352 #         b.e = True
 353 # 
 354 #     def eat(b):
 355 #         if b.e:
 356 #             print("吃吃吃")
 357 #             b.e = False
 358 # 
 359 #         else:
 360 #             print("不吃了")
 361 # ---------------------------- 多样继承
 362 # >>> class B:
 363 #     def b(b):
 364 #         print("我是b,我为大B代言")
 365 # 
 366 #         
 367 # >>> class C:
 368 #     def c(c):
 369 #         print("我是c,我为大C代言")
 370 # 
 371 #         
 372 # >>> class D:
 373 #     def d(d):
 374 #         print("我是d,我为大d代言")
 375 # 
 376 #         
 377 # >>> class F(B,C,D):
 378 #     pass
 379 # 
 380 # >>> f = F()
 381 # >>> f.b()
 382 # 我是b,我为大B代言
 383 # >>> f.c()
 384 # 我是c,我为大C代言
 385 # >>> f.d()
 386 # 我是d,我为大d代言
 387 
 388 #------------------类的组合
 389 # class Turle:
 390 #     def __init__(self,x):
 391 #         self.num = x
 392 # 
 393 # class Fish:
 394 #     def __init__(self,x):
 395 #         self.num = x
 396 # 
 397 # class Pool:
 398 #     def __init__(self,x,y):
 399 #         self.turtle = Turtle(x)
 400 #         self.fish = Fish(y)
 401 # 
 402 #     def print_num(self):
 403 #         print("水池里总共有乌龟 %d 只,小鱼 %d 条!" % (self.turtle.num,self.fish.num)
 404 
 405 #--------------------类属性和实例属性
 406 # class C:
 407 #         num = 0                  num和C.count是类属性,其他是实例属性。self其实就是绑定
 408 #         def __init__(self):
 409 #                 self.x = 4
 410 #                 self.y = 5
 411 #                 C.count = 6
 412 
 413 
 414 # class C:
 415 #         def x(self):
 416 #                 print(‘Xman‘)
 417 # 
 418 # >>> c = C()                           如果对象的属性跟方法名字相同,属性会覆盖方法
 419 # >>> c.x()
 420 # Xman
 421 # >>> c.x = 1
 422 # >>> c.x
 423 # 1
 424 # >>> c.x()
 425 # Traceback (most recent call last):
 426 #   File "<pyshell#20>", line 1, in <module>
 427 #     c.x()
 428 # TypeError: ‘int‘ object is not callable
 429 
 430 #--------------------跟踪绑定数量,查看有多少个实例对象参数和删除
 431 # class L:
 432 #     count = 0
 433 #     def __init__(self):
 434 #         L.count += 1
 435 # 
 436 #     def __del__(self):
 437 #         L.count -= 1
 438 
 439 #--------------------判断继承关系,是否继承
 440 # >>> class A:
 441 #     pass
 442 # 
 443 # >>> class B(A):
 444 #     pass
 445 # 
 446 # >>> issubclass(B,A)    B继承A
 447 # True
 448 # >>> issubclass(B,B)
 449 # True
 450 # >>> issubclass(B,object)
 451 # True
 452 # >>> class C:
 453 #     pass
 454 # 
 455 # >>> issubclass(B,C)
 456 # False
 457 # >>>
 458 
 459 #--------------------判断实例对象关系,是否是它的实例对象
 460 # >>> b1 = B()
 461 # >>> isinstance(b1,B)   b1 是 B的实例对象
 462 # True
 463 # >>> isinstance(b1,A)   b1 也是 A的实例对象,因为上题可以看出B继承A
 464 # True
 465 # >>> isinstance(b1,C)
 466 # False
 467 # >>> isinstance(b1,(A,B,C))
 468 # True
 469 # >>>
 470 
 471 #--------------------判断属性是否在类里面
 472 # >>> class C:
 473 #     def __init__(self,x=0):
 474 #         self.x=x
 475 # 
 476 #         
 477 # >>> c1 = C()
 478 # >>> hasattr(c1,"x")
 479 # True
 480 
 481 #--------------------访问类属性的值,def的值
 482 # >>> getattr(c1,"x")
 483 # 0
 484 # >>> getattr(c1,"y")
 485 # Traceback (most recent call last):
 486 #  File "<pyshell#26>", line 1, in <module>
 487 #     getattr(c1,"y")
 488 # AttributeError: ‘C‘ object has no attribute ‘y‘
 489 # >>> getattr(c1,"y","您所访问的属性不存在")
 490 # ‘您所访问的属性不存在‘
 491 #--------------------访问类属性的值,不存在就创建
 492 # >>> setattr(c1,"y","FishC")
 493 # >>> getattr(c1,"y","您所访问的属性不存在")
 494 # ‘FishC‘
 495 #--------------------删除属性,不存在就报错
 496 # >>> delattr(c1,"y")
 497 # >>> delattr(c1,"y")
 498 # Traceback (most recent call last):
 499 #   File "<pyshell#31>", line 1, in <module>
 500 #     delattr(c1,"y")
 501 # AttributeError: y
 502 
 503 #--------------------属性定义属性,property的用法
 504 # >>> class C:
 505 #     def __init__(self,size = 10):
 506 #         self.size = size
 507 #     def getSize(self):
 508 #         return self.size
 509 #     def setSize(self,value):
 510 #         self.size = value
 511 #     def delSize(self):
 512 #         del self.size
 513 #     x = property(getSize,setSize,delSize) 第一个参数,得到属性的值,第二个参数修改参数的值,第三个属性删除值
 514 # 
 515 #     
 516 # >>> c1 = C()
 517 # >>> c1.getSize()
 518 # 10
 519 # >>> c1.x        有 . 符号出现,就调用第一个 得到属性的值
 520 # 10
 521 # >>> c1.x = 18   有=符号出现,就调用第二个  修改属性的值
 522 # >>> c1.x
 523 # 18
 524 # >>> c1.size           为什么要有这个bif函数存在,就是因为如果里面的属性有修改,一样可以用x来调用,用户体验会好一些
 525 # 18
 526 # >>> c1.getSize()
 527 # 18
 528 # >>> del c1.x    有del 出现  ,就调用第三个  删除属性的值
 529 # >>> c1.size
 530 # Traceback (most recent call last):
 531 #   File "<pyshell#64>", line 1, in <module>
 532 #     c1.size
 533 # AttributeError: ‘C‘ object has no attribute ‘size‘
 534 # >>>
 535 
 536 #--------------------三个内置函数修饰符
 537 # staticmethoh、classmethod、property 作用分别是静态方法、类方法、类属性
 538 # http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000
 539 #     装饰器的相关内容,打开网址
 540 
 541 # ----------------------------魔法方法的相关内容--------------------
 542 
 543 # __new__重写(一般不用到)传入一个初始值,传给__init__这是第一个接收参数的魔法方法
 544 # >>> class C(str):   重写str 因为str是不能修改的,所以要用new 新的方法
 545 #     def __new__(cls,string):  重写的内容 cls是自身的类,只有string会传给init
 546 #         string = string.upper()  转换大写
 547 #         return str.__new__(cls,string)   用重写的str.__new__函数来处理括号内的内容
 548 # 
 549 # >>> a = C("I love FishC.")
 550 # >>> a
 551 # ‘I LOVE FISHC.‘
 552 # >>> 
 553 
 554 # __init__方法
 555 # class A:
 556 #     def __init__(self,x,y)  传入一个初始值
 557 
 558 # __del__方法, 当函数没在被任何参数调用的时候,del方法就生效,也就是删除自身
 559 # >>> class C:
 560 #     def __init__(self):
 561 #         print("我是__init__方法,我被调用了...")
 562 #     def __del__(self):
 563 #         print("我是__del__方法,我被调用了...")
 564 # 
 565 #         
 566 # >>> c1 = C()
 567 # 我是__init__方法,我被调用了...
 568 # >>> c2 = c1
 569 # >>> c3 = c2
 570 # >>> del c3
 571 # >>> del c2
 572 # >>> del c1    只有全部删除了,才会启动删除方法,删除自身函数所在的内存
 573 # 我是__del__方法,我被调用了...
 574 
 575 
 576 # >>> class New_int(int):     我们定义一下对象加和减时,会进行的操作
 577 #     def __add__(self,other):  如果执行加数操作,则进行这一行的方法  self是自身,b是被加数, 如a+b, a是self b是other
 578 #         return int.__sub__(self,other)  返回两数相减
 579 #     def __sub__(self,other):
 580 #         return int.__add__(self,other)
 581 # 
 582 #     
 583 # >>> a = New_int(3)
 584 # >>> b = New_int(5)
 585 # >>> a + b
 586 # -2
 587 # ----------------------------python一些内置函数的说明
 588 # 像int() float()str()  list()  tuple()这些bif 其实都是类,当调用它们的时候,事实上就是创建了一个相应的实例对象
 589 # a 和 b 是工厂函数(类对象) int 的实例对象
 590 # >>> a = int(‘123‘)
 591 # >>> b = int(‘345‘)
 592 # >>> a + b
 593 # 468
 594 
 595 # >>> class N(int):
 596 #     def __radd__(self,other):       反运算方法,  
 597 #         return int.__sub__(self,other)  self是b,other是1 , 这个要注意顺序,self是自身
 598 # 
 599 #     
 600 # >>> b = N(3)
 601 # >>> 1 + b          因为1是数值,没有add方法,所以就调用b的反运算方法
 602 # 2
 603 
 604 # BaseAlias = BaseClass  # 为基类取别名    如果是动态基类就用这个方法
 605 # 
 606 # class Derived(BaseAlias):
 607 #     def meth(self):
 608 #         BaseAlias.meth(self)  # 通过别名访问基类
 609 #         ...
 610 
 611 # ----------------------------GUI的相关内容------------------------
 612 
 613 #--------------------------------按钮相关组件---------------
 614 #-----------------------------------------------------------
 615 
 616 # >>> import easygui as g
 617 # >>> g.msgbox("Hello, world!")
 618 # ‘OK‘
 619 # >>> g.msgbox("Hello, world!","标题")   第二栏是标题
 620 
 621 #------------msgbox消息框内容----------
 622 
 623 # msgbox(msg内容,title消息框标题,ok_button"ok"按钮,imgae插入图片,root尺寸)
 624 
 625 # import easygui as g
 626 # import sys
 627 # g.msgbox("我一定要学会编程!", ok_button="加油!")
 628 
 629 #------------ccbox对话选择框----------
 630 
 631 # ccbox(msg选择框内容,title选择框标题,choices=("Continue确认","Cancel取消"),imgae插入图片)
 632 
 633 # 选择第一个返回1 或 其他返回0 ,  不是True 或 False
 634 # import easygui as g
 635 # import sys
 636 # 
 637 # while 1:
 638 #     if g.ccbox(‘要再来一次吗?‘, choices=(‘要啊要啊^_^‘, ‘算了吧T_T‘)):
 639 #             g.msgbox(‘行吧,那继续‘)
 640 #             pass
 641 #     else:
 642 #             g.msgbox(‘不玩了,再玩就玩坏了......‘)
 643 #             sys.exit(0)         记得先 import sys 哈  "0"是正常退出
 644 
 645 #------------yngbox对话选择框----------
 646 
 647 # yngbox(msg选择框内容,title选择框标题,choices=("Yes是","No否"),imgae插入图片)
 648 
 649 # 选择第一个返回1 或 其他返回0 ,  不是True 或 False
 650 # import easygui as g
 651 # import sys
 652 # 
 653 # while 1:
 654 #     if g.ynbox(‘要再来一次吗?‘, choices=(‘要啊要啊^_^‘, ‘算了吧T_T‘)):
 655 #             g.msgbox(‘行吧,那继续‘)
 656 #             pass
 657 #     else:
 658 #             g.msgbox(‘不玩了,再玩就玩坏了......‘)
 659 #            sys.exit(0) # 记得先 import sys 哈
 660 
 661 #     imgae只能是 gif格式
 662 
 663 #------------button按钮内容----------
 664 
 665 # buttonbox(msg按钮内容,title按钮标题,choices=("Button1按钮1","Button2按钮2","Button3按钮3"),imgae插入图片)
 666 
 667 # 返回相应的按钮文本
 668 # import easygui as g
 669 # import sys
 670 # 
 671 # a = g.buttonbox("你喜欢一下哪一种水果?","请选择水果",choices=("草莓","西瓜","芒果"))
 672 # if a == "草莓":      返回选项
 673 #     g.msgbox("草莓太红了,不好看",ok_button="我同意")
 674 # elif a == "西瓜":
 675 #     g.msgbox("西瓜太绿,不好看",ok_button="我同意")
 676 # else :
 677 #     g.msgbox("芒果太黄,不好看",ok_button="我同意")
 678 
 679 #------------indexbox对话选择框----------
 680 
 681 # indexbox(msg选择框内容,title选择框标题,choices=("Yes是","No否"),imgae插入图片)
 682 
 683 # 选择第一个返回0 或 其他返回1 ,  不是True 或 False
 684 # a = g.indexbox("选择确认还是取消?","请选择",choices=("确认","取消","不知道"))
 685 # print(a)
 686 # 选择1则打印0 , 选择2则打印1
 687 
 688 #------------boolbox对话选择框----------
 689 
 690 # boolbox(msg选择框内容,title选择框标题,choices=("Yes是","No否"),imgae插入图片)
 691 
 692 # 选择第一个返回1 或 其他返回0 ,  不是True 或 False
 693 # import easygui as g
 694 # import sys 
 695 # a = g.boolbox("选择确认还是取消?","请选择",choices=("确认","取消","不知道"))
 696 # print(a)
 697 
 698 
 699 #--------------------------------为用户提供选项---------------
 700 #-----------------------------------------------------------
 701 
 702 
 703 #------------choicebox选择列表框(单选)----------
 704 
 705 # choicebox(msg选择列表内容,title选择列表标题,choices=("选项1","选项2",....))
 706 
 707 # 选择 返回 选项
 708 # import easygui as g
 709 # import sys
 710 # a = g.choicebox("请选择","这是标题",choices=("选项1","选项2","选项3"))
 711 # print(a)
 712 
 713 
 714 # b = ["选项1","选项2","选项3"]
 715 # a = g.choicebox("请选择","这是标题",choices=(b))
 716 # print(a)
 717 
 718 #------------multchoicebox选择列表框(多选)----------
 719 
 720 # multchoicebox(msg选择列表内容,title选择列表标题,choices=("选项1","选项2",....,**kwargs))
 721 
 722 # 以列表类型返回,单个参数或者多个参数
 723 # import easygui as g
 724 # import sys
 725 
 726 # b = ["g1","g2","g3"]
 727 # a = g.multchoicebox("请选择","这是标题",choices=(b))  选项可多选,新增全选和全取消选项
 728 # print(a)
 729 
 730 
 731 #--------------------------------让用户输入消息---------------
 732 #-----------------------------------------------------------
 733 
 734 #----------------enterbox输入框-------------
 735 
 736 # enterbox(msg输入框内容,title输入框标题,default=""输入内容默认为空,strip=True去除首尾空格,image插入图片)
 737 
 738 # 返回用户输入的内容,如果strip = True 将去掉首尾空格, 否则 将空格一起返回
 739 # a = g.enterbox("请输入内容","这是标题")
 740 # print(a)
 741 
 742 #------------------integerbox输入框(范围)----------
 743 
 744 # integerbox(msg输入框内容,title输入框标题,default=""输入内容默认为空,lowerbound=0范围最小值,upperbound=99范围最大值,image=None,root=None,**invalidKeywordArguments)
 745 
 746 # 返回范围内的值,超过则重新输入
 747 # a = g.integerbox("请输入内容","这是标题",upperbound=10)  只能输入0-10的数值
 748 # print(a)
 749 
 750 #------------------multenterbox输入框(多项)----------
 751 
 752 # multenterbox(msg输入框内容,title输入框标题,fields=()输入框选项,values()选项对应内容)
 753 
 754 # 以列表形式返回选项内的值,没输入的选项用空字符代替。多的话直接截断为选项数量
 755 # a = g.multenterbox("请输入内容","这是标题",fields=("1","2","3"),values=("4","5","6"))
 756 # print(a)
 757 
 758 #--------------------------------让用户输入密码---------------
 759 #-----------------------------------------------------------
 760 
 761 #------------------passwordbox密码输入框-----------
 762 
 763 # passwordbox(msg输入框内容,title输入框标题,default=""输入框默认值,image图片,root尺寸)
 764 
 765 # 返回输入的内容(密码)
 766 # a = g.passwordbox("请输入内容","这是标题")
 767 # print(a)
 768 
 769 #------------------multpasswordbox账户密码输入框-----------
 770 
 771 # multpasswordbox(msg输入框内容,title输入框标题,fields=()输入框选项,values()选项对应内容)
 772 
 773 # 返回输入的账户和密码,未输入则返回空值
 774 # a = g.multpasswordbox("请输入内容","这是标题",fields=("账户","密码"))
 775 # print(a)
 776 
 777 #--------------------------------显示文本内容---------------
 778 #-----------------------------------------------------------
 779 
 780 #------------------textbox文本显示框-----------
 781 
 782 # textbox(msg输入框内容,title标题,text=""文本内容,codebox=0文字比例)
 783 
 784 # 返回文本内的内容,text的内容可以是字符串类型,列表类型,或者元组类型
 785 # c = open("record.txt")
 786 # a = g.textbox("请输入内容","这是标题",text=c,codebox=0)
 787 # print(a)
 788 
 789 #------------------codebox文本显示框-----------
 790 
 791 # codebox(msg输入框内容,title标题,text=""文本内容)
 792 
 793 # 返回文本内的内容,text的内容可以是字符串类型,列表类型,或者元组类型,但是codebox=1,其他用法同上
 794 # c = open("record.txt")
 795 # a = g.codebox("请输入内容","这是标题",text=c,)
 796 # print(a)
 797 
 798 #--------------------------------目录与文件---------------
 799 #-----------------------------------------------------------
 800 
 801 #------------------diropenbox路径选择-----------
 802 
 803 # diropenbox(msg路径框内容,title标题,default=None设置默认路径)
 804 
 805 # 返回选择的路径,点取消则返回空
 806 # a = g.diropenbox("请选择打开的目录","这是标题")
 807 # print(a)
 808 
 809 #------------------fileopenbox文件打开选择-----------
 810 
 811 # fileopenbox(msg路径框内容,title标题,default="*"默认路径的所有(*)文件,filetypes=None文件类型)
 812 
 813 # 返回选择打开的文件,点取消则返回空,filetypes = ["*.txt"],default="c:\A\*.py" 则显示c:\A文件夹下所有的py文件
 814 # a = g.fileopenbox("请选择打开的文件","这是标题",filetypes=("*.py","*.exe"))
 815 # print(a)
 816 
 817 #------------------filesavebox保存路径选择-----------
 818 
 819 # filesavebox(msg路径框内容,title标题,default=""设置默认路径,filetypes=None文件类型)
 820 
 821 # 返回选择保存的路径,点取消则返回空
 822 # a = g.filesavebox("请选择保存的目录","这是标题",filetypes=("*.py","*.exe"))
 823 # print(a)
 824 
 825 #--------------------------------捕获异常---------------
 826 #-----------------------------------------------------------
 827 
 828 # import easygui as g
 829 # 
 830 # try:
 831 #         print(‘I Love FishC.com!‘)
 832 #         int(‘FISHC‘) # 这里会产生异常
 833 # except:
 834 #         g.exceptionbox()   把异常显示在文本框里面
 835 
 836 #----------------------------with的相关内容------------------------
 837 # try:
 838 #     f = open("data.txt","w")
 839 #     for i in f:
 840 #         print(i)
 841 # except OSError as b:
 842 #     print("出错啦:"+str(b))  "报错的原因是 文本内不存在内容"
 843 # finally:
 844 #     f.close()
 845 
 846 #                  ↓↓↓↓↓上面的内容等于下面的内容↓↓↓↓↓↓↓↓
 847 
 848 # try:
 849 #     with open("data.txt","w") as f:     f = open("data.txt","w") 时刻关注这个文件什么时候没用用到,就自动调用close()
 850 #         for i in f:                       with主要是省去关闭文件的麻烦,或者忘记关闭文件
 851 #             print(i)
 852 # except OSError as b:
 853 #    print("出错啦:"+str(b))
 854 
 855 # with A() as a:
 856 #     with B() as b:
 857 #        suite
 858 
 859 #        等于
 860 
 861 # with A() as a, B() as b:
 862 #     suite
 863 
 864 
 865 
 866 #----------------------------else相关内容------------------------
 867 # if  xx :     如果不是这样 就那样
 868 # else  xx :
 869 
 870 # while  xx :    循环完成 执行else的内容
 871 # else  xx :
 872 
 873 # for xx in xx    循环完成 执行else的内容
 874 # else   xx :
 875 
 876 # try:           检测错误
 877 #       xx
 878 # except  xx :   如果出现错误,执行xx
 879 #       xx :
 880 # else:           如果没出现错误,执行xx。  有出现错误 就不会执行else里的内容
 881 #       print("没有任何异常") :
 882 #----------------------------pickle模块相关内容------------------------
 883 # >>> import pickle    调用pickle 模块
 884 # >>> list1 = [123,3.1415,"小甲鱼",["这是一个列表"]]   
 885 # >>> file = open("list1.pkl","wb") 以二进制写入一个列表 因为列表不是字符串,所以用二进制,永久保存
 886 # >>> pickle.dump(list1,file)     把list1放到file里面。这就是dump(倒入)
 887 # >>> file.close()              最后要关闭文件
 888 # >>> file = open("list1.pkl","rb")  以二进制读取,因为列表不是字符串,所以用二进制
 889 # >>> list2 = pickle.load(file)   load读括号里的内容。
 890 # >>> list2 
 891 # [123, 3.1415, ‘小甲鱼‘, [‘这是一个列表‘]]
 892 # >>>
 893 
 894 #----------------------------出现报错、异常处理------------------------
 895 # try:   检测下面的内容   只要一出现错误,就在错误处直接中断代码
 896 #     f = open("我为什么是一个文件.txt")  这个文件根本不存在工作目录内
 897 #     print(f.read())      打开这个不存在的文件
 898 #     f.close()        "关闭"这个不存在的文件
 899 # except OSError:      如果OS,操作系统出错,则返回下面内容
 900 #     print("文件出错啦")
 901 # >>> 
 902 # 文件出错啦
 903 
 904 # try:
 905 #     f = open("我为什么是一个文件.txt")
 906 #     print(f.read())
 907 #     f.close()
 908 # except OSError as i:   如果是os出错,也就是操作系统出错,i是错误原因
 909 #     print("文件出错啦\n错误的原因是:" + str(i))  答应错误原因
 910 # >>> 
 911 # 文件出错啦
 912 # 错误的原因是:[Errno 2] No such file or directory: ‘我为什么是一个文件.txt‘
 913 
 914 
 915 # try:
 916 #     sum = 1+"1"
 917 #     f = open("我为什么是一个文件.txt")
 918 #     print(f.read())
 919 #     f.close()
 920 # except OSError as i:
 921 #     print("文件出错啦\n错误的原因是:" + str(i))
 922 # except TypeError as a:    如果类型出错 返回
 923 #     print("类型出错啦\n错误的原因是:" + str(a))
 924 # >>> 
 925 # 类型出错啦     因为sum在第一个,所以sum出错弹出相应内容  然后终止,不进行下面的代码
 926 # 错误的原因是:unsupported operand type(s) for +: ‘int‘ and ‘str‘
 927 
 928 # try:
 929 #     int("abc")    这个是Value错误, 也就是值错误, 因为abc不能转换成整数
 930 #     sum = 1+"1"
 931 #     f = open("我为什么是一个文件.txt")
 932 #     print(f.read())
 933 #     f.close()
 934 # except OSError as i:
 935 #     print("文件出错啦\n错误的原因是:" + str(i))
 936 # except TypeError as a:
 937 #     print("类型出错啦\n错误的原因是:" + str(a))
 938 #         如果没有定义检测 int("abc")的出错类型,也就是ValueError, 就会报错。
 939 #         解决方法有,  但是这个方法会有一些隐藏的错误被屏蔽。 如ctrl+c 强制终止程序,会失效。
 940 # except:     用这个代码, 遇到错误直接返回下面的内容
 941 #     print("不管什么错误,只要有错误,我就会弹出这个窗口")
 942 
 943 
 944 # try:
 945 #     sum = 1+"1"
 946 #     f = open("我为什么是一个文件.txt")
 947 #     print(f.read())
 948 #     f.close()
 949 # except (OSError,TypeError):    整合错误
 950 #     print("出错啦")
 951 
 952 
 953 # try:
 954 #     f = open("我为什么是一个文件.txt","w")
 955 #     print(f.write("我存在了!"))
 956 #     sum = 1+"1"
 957 # except (OSError,TypeError):
 958 #     print("出错啦")
 959 # 
 960 # finally:               这个语句是,如果前面有出错,不管怎样继续执行finnlly里面的内容
 961 #     f.close()          这样做的好处就是,如果你写了内容到文件,但是还没关闭的时候出现了一个错误
 962 #                        这些内容就会丢失, 这时候需要一个出现错误,执行finally里面的内容。
 963 #                       即使没有错误,也是这个顺序, try检测代码区的内容,然后执行finally里的内容
 964 #                       finally相当于收尾了
 965 
 966 
 967 # >>> raise               raise 引出一个异常
 968 # Traceback (most recent call last):
 969 #   File "<pyshell#1>", line 1, in <module>
 970 #     raise
 971 # RuntimeError: No active exception to reraise
 972 # >>> raise ZeroDivisionError("除数为零的异常")    raise 引出一个异常,异常的内容就是括号里的内容 
 973 # Traceback (most recent call last):
 974 #   File "<pyshell#2>", line 1, in <module>
 975 #     raise ZeroDivisionError("除数为零的异常")
 976 # ZeroDivisionError: 除数为零的异常
 977 #----------------------------字符串相关内容------------------------
 978 # >>> "{0} love {1}.{2}".format("i","fis","com")  format格式化
 979 # ‘i love fis.com‘
 980 
 981 # >>> "{a} love {b}.{c}".format(a="i",b="fis",c="com")  format格式化
 982 # ‘i love fis.com‘
 983 
 984 # >>> "{{0}}".format("不打印")
 985 # ‘{0}‘
 986 # >>> "{{0}}"
 987 # ‘{{0}}‘
 988 # >>> "{0}".format("不打印")
 989 # ‘不打印‘
 990 # >>> 
 991 
 992 # >>> "%c" % 97
 993 # ‘a‘
 994 
 995 # >>> "%c %c %c" % (97,98,99)
 996 # ‘a b c‘
 997 
 998 # q = True
 999 # while q:
1000 #     num = input(‘请输入一个整数(输入Q结束程序):‘)
1001 #     if num != ‘Q‘:
1002 #         num = int(num)
1003 #         print(‘十进制 -> 十六进制 : %d -> 0x%x‘ % (num, num))
1004 #         print(‘十进制 -> 八进制 : %d -> 0o%o‘ % (num, num))
1005 #         print(‘十进制 -> 二进制 : %d -> ‘ % num, bin(num))  print打印会自动屏蔽逗号
1006 #     else:
1007 #         q = False
1008 #----------------------------变量的相关内容-------------------------
1009 #  Local 局部变量    Global 全局变量
1010 # 局部变量不能
1011 
1012 
1013 #----------------------------闭包函数的相关内容-------------------------
1014 
1015 # >>> def a(x):
1016 #     def b(y):
1017 #         return x * y
1018 #     return b
1019 # >>> i = a(8)
1020 # >>> i(5)
1021 # 40
1022 # >>> a(6)(8)
1023 # 48
1024 # >>>
1025 
1026 #  会报错的原因是  因为x的变量是放在容器里面的,x属于a()里面, 不属于b()里面, 所以b里面的x没有参数,所以报错
1027 # >>> def a():
1028 #     x = 5
1029 #     def b():
1030 #         x *= x
1031 #         return x
1032 #     return b()
1033 
1034 # >>> a()
1035 # Traceback (most recent call last):
1036 #   File "<pyshell#34>", line 1, in <module>
1037 #     a()
1038 #   File "<pyshell#33>", line 6, in a
1039 #    return b()
1040 #   File "<pyshell#33>", line 4, in b
1041 #     x *= x
1042 # UnboundLocalError: local variable ‘x‘ referenced before assignment
1043 
1044 
1045 # >>> def a():
1046 #     x = 5
1047 #     def b():
1048 #         nonlocal x
1049 #         x *= x
1050 #         return x
1051 #     return b()
1052 
1053 # >>> a()
1054 # 25
1055 
1056 
1057 # 列表不是放在容器里面的, 所以在b()里面不会报错
1058 # >>> def a():
1059 #     x = [5]
1060 #     def b():
1061 #         x[0] *= x[0]
1062 #         return x[0]
1063 #     return b()
1064 
1065 # >>> a()
1066 # 25
1067 
1068 # 局部变量和全局变量
1069 # >>> c = 5
1070 # >>> def b():
1071 #     c = 10
1072 #     print(c)
1073 
1074 # >>> b()
1075 # 10
1076 # >>> print(c)
1077 # 5
1078 # >>> def b():
1079 #     global c
1080 #     c = 10
1081 #     print(c)
1082 # >>> b()
1083 # 10
1084 # >>> print(c)
1085 # 10
1086 
1087 
1088 # def funX():
1089 #     x = 5
1090 #     def funY():
1091 #         nonlocal x    x一直没有被释放 所以一直叠加
1092 #         x += 1
1093 #         print("x是",x)
1094 #         return x
1095 #     return funY
1096 # a = funX()
1097 # print(a())  一直访问funY()
1098 # print(a())一直访问funY()
1099 # print(a())一直访问funY()
1100 
1101 #----------------------------函数的相关内容-------------------------
1102 # def add(a,b):   定义函数
1103 #   return(a+b)
1104 # print(add(4,5))
1105 # 11
1106 
1107 # >>> def ba(name):
1108 #     ‘参数的内容‘
1109 #     print("xxxx"+name+"cccc")
1110 
1111 # >>> ba.__doc__
1112 # ‘参数的内容‘
1113 
1114 # >>> def cc(x,y):
1115 #     print(x+"-"+y)
1116 
1117 # >>> cc("20","1")定义参数标签,防止混淆
1118 # 20-1
1119 # >>> cc(y="1",x="20")
1120 # 20-1
1121 
1122 # >>> def cc(x="x",y="y"): 定义默认参数
1123 #     print(x+"-"+y)
1124 # >>> cc()
1125 # x-y
1126 # >>> cc("1","2")
1127 # 1-2
1128 # >>>
1129 
1130 # >>> def oo(*c):        收集参数
1131 #     print("参数的长度是:",len(c));
1132 #     print("第二个参数是:",c[1]);
1133 
1134 # >>> oo(1,2,3,4)
1135 # 参数的长度是: 4
1136 # 第二个参数是: 2
1137 
1138    
1139 # >>> def oo(*c,a=1):      收集参数函数里再添加参数
1140 #     print("参数的长度是:",len(c),a);
1141 #     print("第二个参数是:",c[1],a);
1142 
1143     
1144 # >>> oo(7,8,9,10)
1145 # 参数的长度是: 4 1
1146 # 第二个参数是: 8 1
1147 
1148 #------------------匿名函数------------------------------
1149 # >>> g = lambda x: x * 2+1
1150 # >>> g(5)
1151 # 11
1152 # >>> g = lambda x,y:x+y
1153 # >>> g(5,6)
1154 # 11
1155 # >>>
1156 
1157 
1158 # c=list(map(lambda x, y : [x, y], (1, 3, 5, 7,9), (2, 4, 6, 8, 10)))
1159 # print(c)
1160 # >>> 
1161 # [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
1162 
1163 #------------------递归函数------------------------------
1164 # def cc(x):
1165 #     a = x
1166 #     print("这个a是",a)
1167 #     for i in range(1,x):
1168 #         print("i是",i)
1169 #         a *= i
1170 #         print("a是",a)
1171 #     print("最后的a是",a)
1172 #     return a
1173 # 
1174 # b = int(input("输入一个数字:"))
1175 # ff = cc(b)
1176 # print("%d 的阶层是 %d"% (b,ff))
1177 
1178 
1179 # def cc(n):
1180 #     print("cc(n)是",n)
1181 #     if n == 1:
1182 #         return n
1183 #     else:
1184 #         print("n是",n)
1185 #         return n * cc(n-1)
1186 # c = int(input("请输入一个正整数:"))
1187 # b = cc(c)
1188 # print("%d 的阶层是: %d" % (c,b))
1189 # 解析
1190 # cc(5) = 5 * cc(4)    ↑
1191 #  cc(4) = 5 * cc(3)    ↑
1192 #   cc(3) = 5 * cc(2)    ↑
1193 #    cc(2) = 5 * cc(1)    ↑
1194 #     cc(1) = 1            ↑
1195 
1196 # def power(x, y):   求x的y次方
1197 #     if y:
1198 #         return x * power(x, y-1)
1199 #     else:
1200 #         return 1
1201 #     
1202 # print(power(3, 3))
1203 # 解析
1204 # def power(x, y):
1205 #     if y:
1206 #         return x =3 * power(3, 2) = 9
1207 #                         x =3 * power(3, 1) = 3
1208 #                                 x=3 * power(3, 0) = 1  这个1是下面那个return返回的1
1209 #     else:
1210 #         return 1
1211 
1212 
1213 #------------------递归函数 汉诺塔--------------------
1214 # def cc(n,a,b,c):
1215 #     if n == 1:
1216 #         print(a,"->",c)
1217 #         return
1218 #     else:
1219 #         cc(n-1,a,c,b)     cc(1,a,b,c)       
1220 #         cc(1,a,b,c)       cc(1,a,c,b)
1221 #         cc(n-1,b,a,c)     cc(1,c,a,b)
1222 # b = int(input("请输入盘数:"))
1223 # cc(b,"1杆","2杆","3杆")
1224 
1225 #------------------过滤器------------------------------
1226 # >>> list(filter(None,[1,0,False,True]))
1227 # [1, True]
1228 
1229 
1230 # >>> def odd(x):  筛选奇数
1231 #     return x % 2
1232 # >>> temp = range(10)
1233 # >>> show = filter(odd,temp)
1234 # >>> list(show)
1235 # [1, 3, 5, 7, 9]
1236 # >>>
1237 
1238 # >>> list(filter(lambda x:x%2,temp)) 和匿名函数结合使用 更简洁
1239 # [1, 3, 5, 7, 9]
1240 
1241 #------------------map映射------------------------------
1242 # >>> list(map(lambda x:x*2,temp))  对每个可迭代元素加工计算,然后返回
1243 # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
1244 
1245 #----------------------------循环相关内容---------------------------
1246 
1247 # while 条件:   while循环, 如果条件为真, 将一直循环
1248 # for 目标 in 表达式: 表达式可以是 数组,字符串,  目标 依次循环 表达式
1249 # print(xx) 表示打印显示xx内容 ,print(xx , end = " ")  print每次打印 默认换行,end表示结尾做什么,end = " "就表示结尾不换行,用空格代替 len(xx)表示取文本长度"
1250 # range(开始数 , 结束数 , 每次递增)  跟for搭配  如: for i in range(1,10,2):
1251 # list(range(5)) 表示把参数生产列表,输出[0,1,2,3,4]
1252 # 循环体 里 输入 break  可以跳出循环
1253 # 循环体 里 输入 continue  可以跳出本局循环,进行下一组循环
1254 
1255 #----------------------------字典相关内容-----------------------------
1256 # >>> list3={‘李宁‘:‘一切皆有可能‘,‘耐克‘:‘Just do It‘}
1257 # >>> print("耐克的口号是:",list3["耐克"])
1258 # 耐克的口号是: Just do It
1259 
1260 
1261 
1262 #     也可以是数字
1263 # >>> list4={1:"one",2:"two",3:"three"}
1264 # >>> list4
1265 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
1266 # >>> list4[1]
1267 # ‘one‘
1268 
1269 #       创建字典的两个方法
1270 # >>> dict3 = dict((("F",70),("i",105),("s",115),("h",104),("c",67)))
1271 # >>> dict3
1272 # {‘F‘: 70, ‘c‘: 67, ‘s‘: 115, ‘h‘: 104, ‘i‘: 105}
1273 # >>> dict4 = dict(小甲鱼="让变成改变世界",耐克="Just do It")
1274 # >>> dict4
1275 # {‘耐克‘: ‘Just do It‘, ‘小甲鱼‘: ‘让变成改变世界‘}
1276 
1277 #       改变字典的内容
1278 # >>> dict4["耐克"]="改变一下"
1279 # >>> dict4
1280 # {‘耐克‘: ‘改变一下‘, ‘小甲鱼‘: ‘让变成改变世界‘}
1281 
1282 #       添加字典的内容
1283 # >>> dict4["添加"]="添加的内容"
1284 # >>> dict4
1285 # {‘耐克‘: ‘改变一下‘, ‘添加‘: ‘添加的内容‘, ‘小甲鱼‘: ‘让变成改变世界‘}
1286 
1287 #       字典的fromkeys 批量添加
1288 # >>> dict1 = {}
1289 # >>> dict1.fromkeys((1,2,3))
1290 # {1: None, 2: None, 3: None}  没有内容
1291 # >>> dict1.fromkeys((1,2,3),(4,5,6))
1292 # {1: (4, 5, 6), 2: (4, 5, 6), 3: (4, 5, 6)}  添加内容
1293 # >>> dict1.fromkeys((1,2,3),"cc")
1294 # {1: ‘cc‘, 2: ‘cc‘, 3: ‘cc‘}
1295 # >>> dict1.fromkeys((1,3),"cc")  不能改某个键的值,这样写只能重新创建一个新的字典
1296 # {1: ‘cc‘, 3: ‘cc‘}
1297 
1298 #----------------字典的 keys和values和items--------------
1299 
1300 # 创建字典的几种方法
1301 # >>> a = dict(one=1, two=2, three=3)
1302 # >>> b = {‘one‘: 1, ‘two‘: 2, ‘three‘: 3}
1303 # >>> c = dict(zip([‘one‘, ‘two‘, ‘three‘], [1, 2, 3]))
1304 # >>> d = dict([(‘two‘, 2), (‘one‘, 1), (‘three‘, 3)])
1305 # >>> e = dict({‘three‘: 3, ‘one‘: 1, ‘two‘: 2})
1306 
1307 
1308 
1309 
1310 # >>> dict3 = {}
1311 # >>> dict3=dict3.fromkeys(range(3),"赞")
1312 # >>> dict3
1313 # {0: ‘赞‘, 1: ‘赞‘, 2: ‘赞‘}
1314 # >>> for i in dict3.keys():
1315 #     print(i)
1316 
1317     
1318 # 0
1319 # 1
1320 # 2
1321 
1322 
1323 
1324 # >>> for i in dict3.values():
1325 #     print(i)
1326 
1327     
1328 #
1329 #
1330 #
1331 
1332 # >>> for i in dict3.items():
1333 #     print(i)
1334 
1335     
1336 # (0, ‘赞‘)
1337 # (1, ‘赞‘)
1338 # (2, ‘赞‘)
1339 
1340 #-----------判断值是否在字典中------------
1341 # >>> dict3.get(3,"木有!")  判断有没有在字典中, 没有就回复 “木有”  有就回复键对应的值
1342 # ‘木有!‘
1343 # >>> dict3.get(2,"木有!")
1344 # ‘赞‘
1345 
1346 # >>> 2 in dict3
1347 # True
1348 # >>> 3 in dict3
1349 # False
1350 #----------------清空字典------------
1351 # >>> dict3
1352 # {0: ‘赞‘, 1: ‘赞‘, 2: ‘赞‘}
1353 # >>> dict3.clear()
1354 # >>> dict3
1355 # {}
1356 
1357 # >>> a = {"a":"b"}
1358 # >>> a
1359 # {‘a‘: ‘b‘}
1360 # >>> b = a
1361 # >>> b
1362 # {‘a‘: ‘b‘}
1363 # >>> a={}    这个a = {}也能清空,但是不严谨。但是字典还存在内存中
1364 # >>> a
1365 # {}
1366 # >>> b
1367 # {‘a‘: ‘b‘}
1368 
1369 
1370 # >>> b
1371 # {‘a‘: ‘b‘}
1372 # >>> a = b
1373 # >>> 
1374 # >>> a
1375 # {‘a‘: ‘b‘}
1376 # >>> a.clear()   这个a.clear()  才会把字典清除
1377 # >>> a
1378 # {}
1379 # >>> b
1380 # {}
1381 
1382 #----------------拷贝字典------------
1383 # >>> a = {1:"one",2:"two",3:"three"}
1384 # >>> b = a.copy()
1385 # >>> c = a
1386 # >>> a
1387 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
1388 # >>> b
1389 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}           a = c 其实只是给 字典贴了两个便签而已
1390 # >>> c
1391 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
1392 # >>> id(a)
1393 # 48073992
1394 # >>> id(b)
1395 # 48191112
1396 # >>> id(c)
1397 # 48073992
1398 
1399 
1400 # >>> a
1401 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
1402 # >>> a.popitem()  随机删除
1403 # (1, ‘one‘)
1404 # >>> a
1405 # {2: ‘two‘, 3: ‘three‘}
1406 # >>> a.setdefault(5,"小白")     相当于添加
1407 # ‘小白‘
1408 # >>> a
1409 # {2: ‘two‘, 3: ‘three‘, 5: ‘小白‘}
1410 # >>> a.pop(5)  指定删除并返回
1411 # ‘小白‘
1412 # >>> a
1413 # {2: ‘two‘, 3: ‘three‘}
1414 # >>>
1415 
1416 
1417 # 把一个字典添加到另一个字典
1418 # >>> a = {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
1419 # >>> a.setdefault("小白")
1420 # >>> a
1421 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘, ‘小白‘: None}
1422 # >>> b = {"小白":"狗"}
1423 # >>> a.update(b)        把一个字典添加到另一个字典   
1424 # >>> a
1425 # {1: ‘one‘, 2: ‘two‘, 3: ‘three‘, ‘小白‘: ‘狗‘}
1426 # >>> 
1427 #----------------------------集合的相关内容------------------------------
1428 # 创建集合,集合里每个元素都是唯一的。 没办法索引。
1429 # >>> set1 = set([1,2,3,4,5,5])  
1430 # >>> set1
1431 # {1, 2, 3, 4, 5}        自动去除重复的元素,留下唯一的值
1432 # >>> 1 in set1     用in / not in 判断某个元素 是否在集合中
1433 # True
1434 # >>> "1" in set1
1435 # False
1436 # >>> set1.add(6)    用add增加某个元素到集合中
1437 # >>> set1
1438 # {1, 2, 3, 4, 5, 6}
1439 # >>> set1.remove(5)   用remove集合中的某个值
1440 # >>> set1
1441 # {1, 2, 3, 4, 6}
1442 
1443 # >>> a = frozenset([1,2,3,4,5])   frozenset集合是不可修改的, 修改将报错
1444 # >>> a
1445 # frozenset({1, 2, 3, 4, 5})
1446 # >>> a.add(0)               修改将报错   
1447 # Traceback (most recent call last):
1448 #   File "<pyshell#10>", line 1, in <module>
1449 #     a.add(0)
1450 # AttributeError: ‘frozenset‘ object has no attribute ‘add‘
1451 # >>>
1452 
1453 # 查看集合数量用len(a)
1454 #----------------------------数组相关内容-----------------------------
1455 
1456 # 创建列表 如 a = [1,2,3,4,5]
1457 # 添加元素到列表 如a.append("xxxx")
1458 # 添加列表到列表 如a.extend(["xxx","xxx"])
1459 # 添加元素并且选择加入的位置 如a.insert(0,"xxx")
1460 # 取数组,如a[0]表示取数组的第一个元素
1461 # 删除元素, 如a.remove("xxx")
1462 # 删除元素, 如del member[1]  指删除数组第一个
1463 # 删除元素, 如member.pop(1)  指删除数组第一个,并且能给剔除的元素命名
1464 # 取区间元素, 如a[1:3] 就取1、2的元素。
1465 # 取区间元素,设置步长 如a[0:8:2]的意思是。取0 、 2 、 4 、 6 、 8 元素对应的内容
1466 # 对列表进行排序 如a.sort(x)
1467 # 取列表内某元素的个数, 如a.count(1),查看1在a里面有多少个
1468 # 查看列表内某元素索引位置, 如a.index(1,3,10),查看1在a里面的位置,范围是3-10
1469 # 翻转列表,a.reverse()
1470 # d.sort(),从小到大排序  d.sort(reverse=True) ,反向排序
1471 # 清空列表 a.clerr()
1472 # 替换元素list1 = [1, [1, 2, [‘小甲鱼‘]], 3, 5, 8, 13, 18]
1473 #        list1[1][2][0] = ‘小鱿鱼‘     这就把"小甲鱼"替换成"小鱿鱼"
1474 # copy()拷贝一个副本
1475 
1476 # 列表间可以判断大小,如a = [123,456]  b = [234,123]  则输入a < b 返回True,只判断第一个元素大小
1477 # 如果a + b 则输出[123,456,234,123]
1478 # 如果a * 3 则输出[123,456,123,456,123,456]
1479 # 另一个表达 d *= 3
1480 # 判断某个元素 是否在列表中 ,如123 in a  返回True, 还有123 not in a返回False
1481 # 创建一个元组,如a = (1,2,3)  元组是没办法修改里面的元素。如果要修改,有其他方法
1482 #      如:a = (1,2,3)
1483 #      如:a = a[:1]+("xx",)+a[1:]  ,元素后面要加逗号,不然python会判断为整数或者其他非元素类型
1484 #               字符串同, 如:b="I love me"   b = b[:6]+"插入的内容" + b[6:]
1485 # 删除整个元组,del a    这就把a这个元组删除
1486 # sorted(xx)  对xx列表进行排序
1487 # list(reversed(xx))  对xx列表进行翻转
1488 # list(enumerate(xx))  输出[(0,1),(1,2),(2,5)]
1489 
1490 # a = [1,2,3,4]
1491 # b = [7,6,5]
1492 # list(zip(a,b))
1493 # 输出 [(1,7),(2,6),(3,5)]
1494 
1495 # list1=[‘1.Just do It‘,‘2.一切皆有可能‘]
1496 # >>> list2=[‘2.李宁‘,‘1.耐克‘]            name、slogan是列表里的变量,name、和slogan会遍历所有列表里的内容。name(0)指遍历所有元素的开头字符串。
1497 # >>> list3 = [name + ‘:‘ + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
1498 # >>> for each in list3:
1499 # print(each)
1500 
1501 # >>> list1=[‘李宁‘,‘耐克‘]
1502 # >>> list2=[‘Just do It‘,‘一切皆有可能‘]
1503 # >>> print("李宁的口号是:",list2[list1.index("李宁")])
1504 # 李宁的口号是: Just do It
1505 
1506 # >>> e = [123,["wc","qq"],456]
1507 # >>> "wc" in e
1508 # False
1509 # >>> "wc" in e[1] 访问列表中的元素中的元素
1510 # True
1511 # >>>
1512 # >>> e[1][1] 访问列表中的元素的元素 第几项
1513 # ‘qq‘
1514 
1515 # >>> list1 = [1,3,2,9,7,8]
1516 # >>> list2 = list1[:] 仅仅是复制文本,list2不会因为list1的变化而变化
1517 # >>> list3 = list1   这个list3会完全复制list1。随着list1的变化而变化
1518 # >>> list1.sort() sort排序
1519 # >>> list1
1520 # [1,2,3,7,8,9]
1521 # >>> list2
1522 # [1,3,2,9,7,8]
1523 # >>> list3
1524 # [1,2,3,7,8,9]
1525 
1526 # >>> list2 = list1.copy()
1527 # >>> list2
1528 # [1, [1, 2, [‘小甲鱼‘]], 3, 5, 8, 13, 18]
1529 
1530 #          >>> name = member.pop(1)
1531 #          >>> name
1532 #           "XXX"
1533 
1534 # >>> f=list()
1535 # >>> f
1536 # []
1537 # >>> b = "I XXX XXX"
1538 # >>> b = list(b)
1539 # >>> b
1540 # [‘I‘, ‘ ‘, ‘X‘, ‘X‘, ‘X‘, ‘ ‘, ‘X‘, ‘X‘, ‘X‘]
1541 # >>>
1542 
1543 # >>> max(1,2,3,4,5)   取参数最大值
1544 # 5
1545 
1546 # >>> min(1,2,3,4,5)   取参数最小值
1547 # 1
1548 
1549 # >>> c = (1.1,2.2,3.3)
1550 # >>> sum(c)
1551 # 6.6
1552 
1553 # >>> c = (1,2,3)
1554 # >>> sum(c,8)
1555 # 14
1556 #--------------------------------------------------------------------------------
1557 #--------------------------------- 系统文件的先关内容 -------------------------------
1558 #--------------------------------------------------------------------------------
1559 # >>> f = open("E:\\record.txt")
1560 # >>> f
1561 # <_io.TextIOWrapper name=‘E:\\record.txt‘ mode=‘r‘ encoding=‘cp936‘>
1562 # >>> f.read()     这里开始输出read.txt里面的内容
1563 #‘小客服:.............................‘
1564 # >>> f.read()     read就像一个标签一样
1565 # ‘‘       再次调用就从文本末尾输出,前面的read没有设置末尾参数,所以直接到末尾。所以到后面的read就什么都读取不到。
1566 
1567 # >>> f.close()
1568 # >>> f = open("E:\\record.txt")
1569 # >>> f.read(5)    读取5个字符
1570 # ‘小客服:小‘
1571 # >>> f.tell()   tell相当于标签,读取到哪里在哪里, tell的意思是读取字节, 因为一个中文相当于2个字节,所以返回9
1572 # 9
1573 
1574 # >>> f.seek(2,0)   意思是把只能指到2字节的位置,如果第一是文字,选1字节会报错
1575 # 2
1576 # >>> f.readline()                      返回一行到指针的位置。
1577 # ‘客服:小甲鱼,今天有客户问你有没有女朋友?\n‘   这里从第二个字节开始到一行,所以“小”没有了
1578 # >>> f.seek(45,0)
1579 # 45
1580 # >>> f.readline()
1581 # ‘小甲鱼:咦??\n‘
1582 
1583 
1584 # >>> for i in f:   迭代每一行,官方推荐的方法。
1585 #     print(i)
1586 
1587     
1588 # 小客服:小甲鱼,今天有客户问你有没有女朋友?
1589 
1590 # 小甲鱼:咦??
1591 
1592 # 小客服:我跟她说你有女朋友了!
1593 
1594 # .......
1595 
1596 # .......
1597 
1598 #------------------------写入文本-------------------
1599 
1600 # >>> f=open("E:\\yi.txt","w")  写入用w。
1601 # >>> f.write("python文件操作命令")  write写入内容,返回写入的字节
1602 # 12
1603 # >>> f.close()     写入后要关闭, 不然等于未更新状态
1604 # >>> 
1605 
1606 # >>> (c,b) = [1,2]
1607 # >>>  c
1608 # 1
1609 # >>>  b
1610 # 2
1611 
1612 # >>> i ="小甲鱼:我靠你的呀"        用split来分割字符串
1613 # >>> (c,b) = i.split(":",1)
1614 # >>> c
1615 # ‘小甲鱼‘
1616 # >>> b
1617 # ‘我靠你的呀‘
1618 #---------------------------------------------------------
1619 
1620 # >>> name = "小甲鱼"
1621 # >>> ‘鱼‘ in name
1622 # True
1623 # >>> ‘肥鱼‘ in name
1624 # False
1625 
1626 # i = i + 1   这个等于  i += 1
1627 
1628 # s为字符串
1629 
1630 # s.isalnum() 所有字符都是数字或者字母,为真返回True,否则返回False
1631 
1632 # s.isalpha() 所有字符都是字母,为真返回True,否则返回False
1633 
1634 # s.isdigit() 所有字符都是数字,为真返回True,否则返回False
1635 
1636 # s.islower() 所有字符都是小写,为真返回True,否则返回False
1637 
1638 # s.isupper() 所有字符都是大写,为真返回True,否则返回False
1639 
1640 # s.istitle() 所有单词都是首字母大写,为真返回True,否则返回False
1641 
1642 # s.isspace() 所有字符都是空白字符,为真返回True,否则返回False
1643 
1644 # 例如:
1645 # >>> s = ‘I love xx‘
1646 # >>> s.isupper()
1647 # >>> True
1648 
1649 # int()整数
1650 # float()浮点数
1651 # str()字符串
1652 
1653 # assert 3 > 4 assert称之为"断言" 判断语言 如果是错误的,抛出AssertionError   主要用于检查代码,判断代码 终止,只有条件为真才能进行
1654 # small = x if x < y else y   ;  选出最小 如 x , y , z = 1 , 2 , 3  small = x if (x < y and x < z) else (y if y < z else z)
1655 
1656 # if else = elif

 

# type(xx)  意思为判断xx 的类型为什么, 整数为int,浮点数为float,字符为str,布尔为bool
# isinstance(xx,cc) 意思为你来判断xx是否为cc类型, 如果是则返回True 不是则返回False
# help(xx)  意思是请求帮助,查看xx的用法
# dir(__builtins__) 查看所有的内置函数# dir(xxx)查看某某内置函数的用法 如dir(list) 查看列表的用法# import xx   调用什么模块# import os   调用操作模块# import pickle 把字符串转换数据,pickle是泡菜的意思
# import timeit# timeit.__doc__  查看doc属性# dir(timeit)  如果有__all__   就说明有哪些函数是作者希望我们能调用的# timeit.__all__  查看可以在外调用的函数# form timeit import *  这样能调用的函数 只有__all__里面的函数# timeit.__file__  查看源代码所在的文件位置,以便浏览# help(timeit)  比doc详细一点,比帮助文档简单一点。
# import random    # secret = random.randint(1,10) 创建1 - 10 的随机数# a = r.choice([1, 2, -1, -2]) 在其中随机选一个数字# locals()  以字典形式弹出当前所有局部变量# globals()  以字典形式弹出当前所有全局变量
# >>> import easygui# >>> easygui.msgbox("我我我")    这个调用代码比较长,不推荐# ‘OK‘# >>> from easygui import*      这个调用代码有覆盖其他函数的可能,慎用# >>> msgbox("shishieryi")# ‘OK‘# >>> import easygui as c          这个推荐使用# >>> c.msgbox("gag")# ‘OK‘# import math as m     m.sqrt(ab) 开方
# a.copy()  浅拷贝, 只能拷贝到浅层,如果拷贝字典,字典里有列表,列表里的内容就无法拷贝到。所以修改列表,拷贝项也会相应改变
# import copy# dict2 = copy.deepcopy(dict1) 深拷贝,能拷贝到字典里的列表。 就是能细分拷贝
# >>> import sys# >>> sys.path       模块存放文件夹  ,模块放在里面可以查询到# [‘‘, ‘F:\\python3.3.2\\Lib\\idlelib‘, ‘C:\\Windows\\SYSTEM32\\python33.zip‘, ‘F:\\python3.3.2\\DLLs‘, ‘F:\\python3.3.2\\lib‘, ‘F:\\python3.3.2‘, ‘F:\\python3.3.2\\lib\\site-packages‘]# >>> # >>> sys.path.append("F:\\py")    可以添加其他路径







#--------------------------------python爬虫相关内容---------------#-----------------------------------------------------------# >>> import urllib.request   网络模块# >>> urllib.request.urlopen("http://www.fishc.com")    打开制定网站,返回对象# <http.client.HTTPResponse object at 0x0000000002EBA4E0># >>> response = urllib.request.urlopen("http://www.fishc.com")   # >>> html = response.read()     读网页对象# >>> print(html)# b‘<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML.......................# ..........     特别乱,要解码才能顺序,才能按网页照搬# .......# ....# .# >>> html = html.decode("utf-8")   解码。# >>> print(html)# <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
# "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"># ........
# ..........# .......# ....# .# -----------------------获取解码# import urllib.request as r# import chardet as c# # a = input("请输入URL:")# response = r.urlopen(a).read()# b = c.detect(response)    这是一个获取解码的模块# c = b["encoding"]# print("该网页使用的编码是:",c)
# -----------------------爬一张网络图片# import urllib.request as r# # response = r.urlopen("http://placekitten.com/400/600")# cat_img = response.read()# # # with open("cat_400_600.jpg","wb") as f:  因为图片也是二进制组成,所以用w读写,d二进制读写来创建#     f.write(cat_img)   把获取的内容 写入到上面的文件# # >>> response.geturl()      可以用geturl来获取url,网址# ‘http://placekitten.com/400/600‘# >>> response.info()             返回的是一个服务器信息# <http.client.HTTPMessage object at 0x0000000002CEA2B0># >>> print(response.info())# Date: Wed, 22 Feb 2017 01:19:43 GMT# Content-Type: text/plain# Content-Length: 0# Connection: close# Set-Cookie: __cfduid=d3b173113a2894991cc087573526acf711487726383; expires=Thu, 22-Feb-18 01:19:43 GMT; path=/; domain=.placekitten.com; HttpOnly# Accept-Ranges: bytes# X-Powered-By: PleskLin# Access-Control-Allow-Origin: *# Cache-Control: public# Expires: Thu, 31 Dec 2020 20:00:00 GMT# Server: cloudflare-nginx      这是网站使用的服务器信息# CF-RAY: 334e9c8af3a72894-SJC# >>> response.getcode()    获取http的状态 ,返回200 就是正常工作# 200    
#--------------------------------模块内测试的方法---------------#-----------------------------------------------------------# if __name__=="__main__"因为main是正在运行的程序自身,只有在模块自运行的时候,才能显示执行的内容,如果在调用这个模块的时候就不会运行#        xxxx 执行的内容        #--------------------------------迭代器的创建---------------#-----------------------------------------------------------# iter()  next()   __next__()# __iter__(self) return self, 只要有iter 那就是一个迭代器,它本身就是迭代器,所以返回本身
#--------------------------------生成器的创建---------------#-----------------------------------------------------------# 在函数中写入yield ..   就是一个生成器,其作用可以中断函数。如果有下一个yield 则从下一个yield开始函数剩余部分。# >>> def myGen():# print("生成器被执行!")# yield 1# yield 2# # # >>> myG = myGen()# >>> next(myG)# 生成器被执行!# 1# >>> next(myG)# 2# >>> next(myG)# Traceback (most recent call last):#   File "<pyshell#10>", line 1, in <module>#     next(myG)# StopIteration
# >>> for i in myGen():# print(i)# # # 生成器被执行!# 1# 2

# >>> def libs():# a = 0# b = 1# while True:# a,b = b , a + b# yield a    相当于终止返回。 所以不会一直循环。# # >>> for each in libs():# if each > 100:# break# print(each,end=" ")# # # 1 1 2 3 5 8 13 21 34 55 89
# >>> e = (i for i in range(10))         生成器推倒式# >>> e# <generator object <genexpr> at 0x0000000002E1A2D0># >>> next(e)# 0# >>> next(e)# 1# >>> next(e)# 2# >>> for each in e:# print(each)# # # 3# 4# 5# 6# 7# 8# 9# >>> sum((i for i in range(100) if i % 2))     生成器推倒式# 2500# >>> sum(i for i in range(100) if i % 2 )# 2500# >>> 
#--------------------------------创建类class---------------#-----------------------------------------------------------
# class One1: # 类名  必须大写开头# #     # 属性#     color = "green"#     weight = 10#     legs = 4#     shell = True#     mouth = "大嘴"# #     # 方法#     def d1(xx):#         print("您调用了d1")# #     def d2(xx):#         print("您调用了d2")# #     def d3(xx):#         print("您调用了d3")# #     def d4(xx):#         print("您调用了d4")# #     def d5(xx):#         print("您调用了d5")
# >>> a = One1()      调用类# >>> a.d1() # 您调用了d1

# >>> class MyLsit(list):   继承list的方法# pass# # >>> list2 = MyLsit()  相当于 list()# >>> list2# []
# >>> list1 = list()# >>> list1# []

# >>> class A:# def fun(self):# print("我是A")# # # >>> class B:# def fun(self):# print("我是B")# # # >>> a = A()# >>> b = B()# >>> a.fun()           多态的。# 我是A# >>> b.fun()# 我是B

# class Name:#     na = "小甲鱼"# #     def pr(ba):#         print(ba.na)  要用ba.na 才能引用

# class Ball:#     def setName(b,x):#         b.c= x# #     def kick(b):#         print("我叫%s,该死的,谁踢我..." % b.c)# # # >>> a = Ball()# >>> a.setName("球A")# >>> a.kick()# 我叫球A,该死的,谁踢我...

# class Ball:#     def __init__(b,x):#         b.c= x# #     def kick(b):#         print("我叫%s,该死的,谁踢我..." % b.c)# # >>> a = Ball("土豆")# >>> a.kick()# 我叫土豆,该死的,谁踢我...
#-----------------------属性的公有和私有
# class Ball():#     __name = "我是私有的"     加了双下划线就是私有属性,只有在类里面才能访问#     name1 = "我是公有的"      这个是公有属性, 在类外面一样可有访问# #     def kick(b):#         return b.__name# >>> a = Ball()# >>> a.name1# ‘我是公有的‘# >>> a.__name# Traceback (most recent call last):         报错了#   File "<pyshell#2>", line 1, in <module>#     a.__name# AttributeError: ‘Ball‘ object has no attribute ‘__name‘# >>> a.kick()# ‘我是私有的‘# >>> a._Ball__name       访问方法。  # ‘我是私有的‘
# >>> class A:# def hello(self):# print("正在调用父类的方法...")# # >>> class C(A):           类的继承,如果有同名的属性或者方法,继承的时候子类会覆盖父类。# pass              # >>> p = A()# >>> p.hello()# 正在调用父类的方法...# >>> c = A()# >>> c.hello()# 正在调用父类的方法...#-----------------------# import random as r# # class Fish:#     def __init__(self):#         self.x = r.randint(0,10)#         self.y = r.randint(0,10)# #     def move(self):#         self.x -= 1#         print("我的位置是",self.x,self.y)# # class G(Fish):#     pass# # class C(Fish):#     pass# # class S(Fish):#     pass# # class Sa(Fish):#     def __init__(b):  因为父类也有init 所以子类会覆盖父类,所以要调用父类的init方法#         #Fish.__init__(b)    两个作用一样#         super().__init__()  两个作用一样#         b.e = True# #     def eat(b):#         if b.e:#             print("吃吃吃")#             b.e = False# #         else:#             print("不吃了")# ---------------------------- 多样继承# >>> class B:# def b(b):# print("我是b,我为大B代言")# # # >>> class C:# def c(c):# print("我是c,我为大C代言")# # # >>> class D:# def d(d):# print("我是d,我为大d代言")# # # >>> class F(B,C,D):# pass# # >>> f = F()# >>> f.b()# 我是b,我为大B代言# >>> f.c()# 我是c,我为大C代言# >>> f.d()# 我是d,我为大d代言
#------------------类的组合# class Turle:#     def __init__(self,x):#         self.num = x# # class Fish:#     def __init__(self,x):#         self.num = x# # class Pool:#     def __init__(self,x,y):#         self.turtle = Turtle(x)#         self.fish = Fish(y)# #     def print_num(self):#         print("水池里总共有乌龟 %d 只,小鱼 %d 条!" % (self.turtle.num,self.fish.num)
#--------------------类属性和实例属性# class C:#         num = 0                  num和C.count是类属性,其他是实例属性。self其实就是绑定#         def __init__(self):#                 self.x = 4#                 self.y = 5#                 C.count = 6

# class C:#         def x(self):#                 print(‘Xman‘)# # >>> c = C()                           如果对象的属性跟方法名字相同,属性会覆盖方法# >>> c.x()# Xman# >>> c.x = 1# >>> c.x# 1# >>> c.x()# Traceback (most recent call last):#   File "<pyshell#20>", line 1, in <module>#     c.x()# TypeError: ‘int‘ object is not callable
#--------------------跟踪绑定数量,查看有多少个实例对象参数和删除# class L:#     count = 0#     def __init__(self):#         L.count += 1# #     def __del__(self):#         L.count -= 1
#--------------------判断继承关系,是否继承# >>> class A:# pass# # >>> class B(A):# pass# # >>> issubclass(B,A)    B继承A# True# >>> issubclass(B,B)# True# >>> issubclass(B,object)# True# >>> class C:# pass# # >>> issubclass(B,C)# False# >>>
#--------------------判断实例对象关系,是否是它的实例对象# >>> b1 = B()# >>> isinstance(b1,B)   b1 是 B的实例对象# True# >>> isinstance(b1,A)   b1 也是 A的实例对象,因为上题可以看出B继承A# True# >>> isinstance(b1,C)# False# >>> isinstance(b1,(A,B,C))# True# >>>
#--------------------判断属性是否在类里面# >>> class C:# def __init__(self,x=0):# self.x=x# # # >>> c1 = C()# >>> hasattr(c1,"x")# True
#--------------------访问类属性的值,def的值# >>> getattr(c1,"x")# 0# >>> getattr(c1,"y")# Traceback (most recent call last):#  File "<pyshell#26>", line 1, in <module>#     getattr(c1,"y")# AttributeError: ‘C‘ object has no attribute ‘y‘# >>> getattr(c1,"y","您所访问的属性不存在")# ‘您所访问的属性不存在‘#--------------------访问类属性的值,不存在就创建# >>> setattr(c1,"y","FishC")# >>> getattr(c1,"y","您所访问的属性不存在")# ‘FishC‘#--------------------删除属性,不存在就报错# >>> delattr(c1,"y")# >>> delattr(c1,"y")# Traceback (most recent call last):#   File "<pyshell#31>", line 1, in <module>#     delattr(c1,"y")# AttributeError: y
#--------------------属性定义属性,property的用法# >>> class C:# def __init__(self,size = 10):# self.size = size# def getSize(self):# return self.size# def setSize(self,value):# self.size = value# def delSize(self):# del self.size# x = property(getSize,setSize,delSize) 第一个参数,得到属性的值,第二个参数修改参数的值,第三个属性删除值# # # >>> c1 = C()# >>> c1.getSize()# 10# >>> c1.x        有 . 符号出现,就调用第一个 得到属性的值# 10# >>> c1.x = 18   有=符号出现,就调用第二个  修改属性的值# >>> c1.x# 18# >>> c1.size           为什么要有这个bif函数存在,就是因为如果里面的属性有修改,一样可以用x来调用,用户体验会好一些# 18# >>> c1.getSize()# 18# >>> del c1.x    有del 出现  ,就调用第三个  删除属性的值# >>> c1.size# Traceback (most recent call last):#   File "<pyshell#64>", line 1, in <module>#     c1.size# AttributeError: ‘C‘ object has no attribute ‘size‘# >>>
#--------------------三个内置函数修饰符# staticmethoh、classmethod、property 作用分别是静态方法、类方法、类属性# http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000#     装饰器的相关内容,打开网址
# ----------------------------魔法方法的相关内容--------------------
# __new__重写(一般不用到)传入一个初始值,传给__init__这是第一个接收参数的魔法方法# >>> class C(str):   重写str 因为str是不能修改的,所以要用new 新的方法# def __new__(cls,string):  重写的内容 cls是自身的类,只有string会传给init# string = string.upper()  转换大写# return str.__new__(cls,string)   用重写的str.__new__函数来处理括号内的内容# # >>> a = C("I love FishC.")# >>> a# ‘I LOVE FISHC.‘# >>> 
# __init__方法# class A:#     def __init__(self,x,y)  传入一个初始值
# __del__方法, 当函数没在被任何参数调用的时候,del方法就生效,也就是删除自身# >>> class C:# def __init__(self):# print("我是__init__方法,我被调用了...")# def __del__(self):# print("我是__del__方法,我被调用了...")# # # >>> c1 = C()# 我是__init__方法,我被调用了...# >>> c2 = c1# >>> c3 = c2# >>> del c3# >>> del c2# >>> del c1    只有全部删除了,才会启动删除方法,删除自身函数所在的内存# 我是__del__方法,我被调用了...

# >>> class New_int(int):     我们定义一下对象加和减时,会进行的操作# def __add__(self,other):  如果执行加数操作,则进行这一行的方法  self是自身,b是被加数, 如a+b, a是self b是other# return int.__sub__(self,other)  返回两数相减# def __sub__(self,other):# return int.__add__(self,other)# # # >>> a = New_int(3)# >>> b = New_int(5)# >>> a + b# -2# ----------------------------python一些内置函数的说明# 像int() float()str()  list()  tuple()这些bif 其实都是类,当调用它们的时候,事实上就是创建了一个相应的实例对象# a 和 b 是工厂函数(类对象) int 的实例对象# >>> a = int(‘123‘)# >>> b = int(‘345‘)# >>> a + b# 468
# >>> class N(int):# def __radd__(self,other):       反运算方法,  # return int.__sub__(self,other)  self是b,other是1 , 这个要注意顺序,self是自身# # # >>> b = N(3)# >>> 1 + b          因为1是数值,没有add方法,所以就调用b的反运算方法# 2
# BaseAlias = BaseClass  # 为基类取别名    如果是动态基类就用这个方法# # class Derived(BaseAlias):#     def meth(self):#         BaseAlias.meth(self)  # 通过别名访问基类#         ...
# ----------------------------GUI的相关内容------------------------
#--------------------------------按钮相关组件---------------#-----------------------------------------------------------
# >>> import easygui as g# >>> g.msgbox("Hello, world!")# ‘OK‘# >>> g.msgbox("Hello, world!","标题")   第二栏是标题
#------------msgbox消息框内容----------
# msgbox(msg内容,title消息框标题,ok_button"ok"按钮,imgae插入图片,root尺寸)
# import easygui as g# import sys# g.msgbox("我一定要学会编程!", ok_button="加油!")
#------------ccbox对话选择框----------
# ccbox(msg选择框内容,title选择框标题,choices=("Continue确认","Cancel取消"),imgae插入图片)
# 选择第一个返回1 或 其他返回0 ,  不是True 或 False# import easygui as g# import sys# # while 1:#     if g.ccbox(‘要再来一次吗?‘, choices=(‘要啊要啊^_^‘, ‘算了吧T_T‘)):#             g.msgbox(‘行吧,那继续‘)#             pass#     else:#             g.msgbox(‘不玩了,再玩就玩坏了......‘)#             sys.exit(0)         记得先 import sys 哈  "0"是正常退出
#------------yngbox对话选择框----------
# yngbox(msg选择框内容,title选择框标题,choices=("Yes是","No否"),imgae插入图片)
# 选择第一个返回1 或 其他返回0 ,  不是True 或 False# import easygui as g# import sys# # while 1:#     if g.ynbox(‘要再来一次吗?‘, choices=(‘要啊要啊^_^‘, ‘算了吧T_T‘)):#             g.msgbox(‘行吧,那继续‘)#             pass#     else:#             g.msgbox(‘不玩了,再玩就玩坏了......‘)#            sys.exit(0) # 记得先 import sys 哈
#     imgae只能是 gif格式
#------------button按钮内容----------
# buttonbox(msg按钮内容,title按钮标题,choices=("Button1按钮1","Button2按钮2","Button3按钮3"),imgae插入图片)
# 返回相应的按钮文本# import easygui as g# import sys# # a = g.buttonbox("你喜欢一下哪一种水果?","请选择水果",choices=("草莓","西瓜","芒果"))# if a == "草莓":      返回选项#     g.msgbox("草莓太红了,不好看",ok_button="我同意")# elif a == "西瓜":#     g.msgbox("西瓜太绿,不好看",ok_button="我同意")# else :#     g.msgbox("芒果太黄,不好看",ok_button="我同意")
#------------indexbox对话选择框----------
# indexbox(msg选择框内容,title选择框标题,choices=("Yes是","No否"),imgae插入图片)
# 选择第一个返回0 或 其他返回1 ,  不是True 或 False# a = g.indexbox("选择确认还是取消?","请选择",choices=("确认","取消","不知道"))# print(a)# 选择1则打印0 , 选择2则打印1
#------------boolbox对话选择框----------
# boolbox(msg选择框内容,title选择框标题,choices=("Yes是","No否"),imgae插入图片)
# 选择第一个返回1 或 其他返回0 ,  不是True 或 False# import easygui as g# import sys # a = g.boolbox("选择确认还是取消?","请选择",choices=("确认","取消","不知道"))# print(a)

#--------------------------------为用户提供选项---------------#-----------------------------------------------------------

#------------choicebox选择列表框(单选)----------
# choicebox(msg选择列表内容,title选择列表标题,choices=("选项1","选项2",....))
# 选择 返回 选项# import easygui as g# import sys# a = g.choicebox("请选择","这是标题",choices=("选项1","选项2","选项3"))# print(a)

# b = ["选项1","选项2","选项3"]# a = g.choicebox("请选择","这是标题",choices=(b))# print(a)
#------------multchoicebox选择列表框(多选)----------
# multchoicebox(msg选择列表内容,title选择列表标题,choices=("选项1","选项2",....,**kwargs))
# 以列表类型返回,单个参数或者多个参数# import easygui as g# import sys
# b = ["g1","g2","g3"]# a = g.multchoicebox("请选择","这是标题",choices=(b))  选项可多选,新增全选和全取消选项# print(a)

#--------------------------------让用户输入消息---------------#-----------------------------------------------------------
#----------------enterbox输入框-------------
# enterbox(msg输入框内容,title输入框标题,default=""输入内容默认为空,strip=True去除首尾空格,image插入图片)
# 返回用户输入的内容,如果strip = True 将去掉首尾空格, 否则 将空格一起返回# a = g.enterbox("请输入内容","这是标题")# print(a)
#------------------integerbox输入框(范围)----------
# integerbox(msg输入框内容,title输入框标题,default=""输入内容默认为空,lowerbound=0范围最小值,upperbound=99范围最大值,image=None,root=None,**invalidKeywordArguments)
# 返回范围内的值,超过则重新输入# a = g.integerbox("请输入内容","这是标题",upperbound=10)  只能输入0-10的数值# print(a)
#------------------multenterbox输入框(多项)----------
# multenterbox(msg输入框内容,title输入框标题,fields=()输入框选项,values()选项对应内容)
# 以列表形式返回选项内的值,没输入的选项用空字符代替。多的话直接截断为选项数量# a = g.multenterbox("请输入内容","这是标题",fields=("1","2","3"),values=("4","5","6"))# print(a)
#--------------------------------让用户输入密码---------------#-----------------------------------------------------------
#------------------passwordbox密码输入框-----------
# passwordbox(msg输入框内容,title输入框标题,default=""输入框默认值,image图片,root尺寸)
# 返回输入的内容(密码)# a = g.passwordbox("请输入内容","这是标题")# print(a)
#------------------multpasswordbox账户密码输入框-----------
# multpasswordbox(msg输入框内容,title输入框标题,fields=()输入框选项,values()选项对应内容)
# 返回输入的账户和密码,未输入则返回空值# a = g.multpasswordbox("请输入内容","这是标题",fields=("账户","密码"))# print(a)
#--------------------------------显示文本内容---------------#-----------------------------------------------------------
#------------------textbox文本显示框-----------
# textbox(msg输入框内容,title标题,text=""文本内容,codebox=0文字比例)
# 返回文本内的内容,text的内容可以是字符串类型,列表类型,或者元组类型# c = open("record.txt")# a = g.textbox("请输入内容","这是标题",text=c,codebox=0)# print(a)
#------------------codebox文本显示框-----------
# codebox(msg输入框内容,title标题,text=""文本内容)
# 返回文本内的内容,text的内容可以是字符串类型,列表类型,或者元组类型,但是codebox=1,其他用法同上# c = open("record.txt")# a = g.codebox("请输入内容","这是标题",text=c,)# print(a)
#--------------------------------目录与文件---------------#-----------------------------------------------------------
#------------------diropenbox路径选择-----------
# diropenbox(msg路径框内容,title标题,default=None设置默认路径)
# 返回选择的路径,点取消则返回空# a = g.diropenbox("请选择打开的目录","这是标题")# print(a)
#------------------fileopenbox文件打开选择-----------
# fileopenbox(msg路径框内容,title标题,default="*"默认路径的所有(*)文件,filetypes=None文件类型)
# 返回选择打开的文件,点取消则返回空,filetypes = ["*.txt"],default="c:\A\*.py" 则显示c:\A文件夹下所有的py文件# a = g.fileopenbox("请选择打开的文件","这是标题",filetypes=("*.py","*.exe"))# print(a)
#------------------filesavebox保存路径选择-----------
# filesavebox(msg路径框内容,title标题,default=""设置默认路径,filetypes=None文件类型)
# 返回选择保存的路径,点取消则返回空# a = g.filesavebox("请选择保存的目录","这是标题",filetypes=("*.py","*.exe"))# print(a)
#--------------------------------捕获异常---------------#-----------------------------------------------------------
# import easygui as g# # try:#         print(‘I Love FishC.com!‘)#         int(‘FISHC‘) # 这里会产生异常# except:#         g.exceptionbox()   把异常显示在文本框里面
#----------------------------with的相关内容------------------------# try:#     f = open("data.txt","w")#     for i in f:#         print(i)# except OSError as b:#     print("出错啦:"+str(b))  "报错的原因是 文本内不存在内容"# finally:#     f.close()
#                  ↓↓↓↓↓上面的内容等于下面的内容↓↓↓↓↓↓↓↓
# try:#     with open("data.txt","w") as f:     f = open("data.txt","w") 时刻关注这个文件什么时候没用用到,就自动调用close()#         for i in f:                       with主要是省去关闭文件的麻烦,或者忘记关闭文件#             print(i)# except OSError as b:#    print("出错啦:"+str(b))
# with A() as a:#     with B() as b:#        suite
#        等于
# with A() as a, B() as b:#     suite


#----------------------------else相关内容------------------------# if  xx :     如果不是这样 就那样# else  xx :
# while  xx :    循环完成 执行else的内容# else  xx :
# for xx in xx    循环完成 执行else的内容# else   xx :
# try:           检测错误#       xx# except  xx :   如果出现错误,执行xx#       xx :# else:           如果没出现错误,执行xx。  有出现错误 就不会执行else里的内容#       print("没有任何异常") :#----------------------------pickle模块相关内容------------------------# >>> import pickle    调用pickle 模块# >>> list1 = [123,3.1415,"小甲鱼",["这是一个列表"]]   # >>> file = open("list1.pkl","wb") 以二进制写入一个列表 因为列表不是字符串,所以用二进制,永久保存# >>> pickle.dump(list1,file)     把list1放到file里面。这就是dump(倒入)# >>> file.close()              最后要关闭文件# >>> file = open("list1.pkl","rb")  以二进制读取,因为列表不是字符串,所以用二进制# >>> list2 = pickle.load(file)   load读括号里的内容。# >>> list2 # [123, 3.1415, ‘小甲鱼‘, [‘这是一个列表‘]]# >>>
#----------------------------出现报错、异常处理------------------------# try:   检测下面的内容   只要一出现错误,就在错误处直接中断代码#     f = open("我为什么是一个文件.txt")  这个文件根本不存在工作目录内#     print(f.read())      打开这个不存在的文件#     f.close()        "关闭"这个不存在的文件# except OSError:      如果OS,操作系统出错,则返回下面内容#     print("文件出错啦")# >>> # 文件出错啦
# try:#     f = open("我为什么是一个文件.txt")#     print(f.read())#     f.close()# except OSError as i:   如果是os出错,也就是操作系统出错,i是错误原因#     print("文件出错啦\n错误的原因是:" + str(i))  答应错误原因# >>> # 文件出错啦# 错误的原因是:[Errno 2] No such file or directory: ‘我为什么是一个文件.txt‘

# try:#     sum = 1+"1"#     f = open("我为什么是一个文件.txt")#     print(f.read())#     f.close()# except OSError as i:#     print("文件出错啦\n错误的原因是:" + str(i))# except TypeError as a:    如果类型出错 返回#     print("类型出错啦\n错误的原因是:" + str(a))# >>> # 类型出错啦     因为sum在第一个,所以sum出错弹出相应内容  然后终止,不进行下面的代码# 错误的原因是:unsupported operand type(s) for +: ‘int‘ and ‘str‘
# try:#     int("abc")    这个是Value错误, 也就是值错误, 因为abc不能转换成整数#     sum = 1+"1"#     f = open("我为什么是一个文件.txt")#     print(f.read())#     f.close()# except OSError as i:#     print("文件出错啦\n错误的原因是:" + str(i))# except TypeError as a:#     print("类型出错啦\n错误的原因是:" + str(a))#         如果没有定义检测 int("abc")的出错类型,也就是ValueError, 就会报错。#         解决方法有,  但是这个方法会有一些隐藏的错误被屏蔽。 如ctrl+c 强制终止程序,会失效。# except:     用这个代码, 遇到错误直接返回下面的内容#     print("不管什么错误,只要有错误,我就会弹出这个窗口")

# try:#     sum = 1+"1"#     f = open("我为什么是一个文件.txt")#     print(f.read())#     f.close()# except (OSError,TypeError):    整合错误#     print("出错啦")

# try:#     f = open("我为什么是一个文件.txt","w")#     print(f.write("我存在了!"))#     sum = 1+"1"# except (OSError,TypeError):#     print("出错啦")# # finally:               这个语句是,如果前面有出错,不管怎样继续执行finnlly里面的内容#     f.close()          这样做的好处就是,如果你写了内容到文件,但是还没关闭的时候出现了一个错误#                        这些内容就会丢失, 这时候需要一个出现错误,执行finally里面的内容。#                       即使没有错误,也是这个顺序, try检测代码区的内容,然后执行finally里的内容#                       finally相当于收尾了

# >>> raise               raise 引出一个异常# Traceback (most recent call last):#   File "<pyshell#1>", line 1, in <module>#     raise# RuntimeError: No active exception to reraise# >>> raise ZeroDivisionError("除数为零的异常")    raise 引出一个异常,异常的内容就是括号里的内容 # Traceback (most recent call last):#   File "<pyshell#2>", line 1, in <module>#     raise ZeroDivisionError("除数为零的异常")# ZeroDivisionError: 除数为零的异常#----------------------------字符串相关内容------------------------# >>> "{0} love {1}.{2}".format("i","fis","com")  format格式化# ‘i love fis.com‘
# >>> "{a} love {b}.{c}".format(a="i",b="fis",c="com")  format格式化# ‘i love fis.com‘
# >>> "{{0}}".format("不打印")# ‘{0}‘# >>> "{{0}}"# ‘{{0}}‘# >>> "{0}".format("不打印")# ‘不打印‘# >>> 
# >>> "%c" % 97# ‘a‘
# >>> "%c %c %c" % (97,98,99)# ‘a b c‘
# q = True# while q:#     num = input(‘请输入一个整数(输入Q结束程序):‘)#     if num != ‘Q‘:#         num = int(num)#         print(‘十进制 -> 十六进制 : %d -> 0x%x‘ % (num, num))#         print(‘十进制 -> 八进制 : %d -> 0o%o‘ % (num, num))#         print(‘十进制 -> 二进制 : %d -> ‘ % num, bin(num))  print打印会自动屏蔽逗号#     else:#         q = False#----------------------------变量的相关内容-------------------------#  Local 局部变量    Global 全局变量# 局部变量不能

#----------------------------闭包函数的相关内容-------------------------
# >>> def a(x):# def b(y):# return x * y# return b# >>> i = a(8)# >>> i(5)# 40# >>> a(6)(8)# 48# >>>
#  会报错的原因是  因为x的变量是放在容器里面的,x属于a()里面, 不属于b()里面, 所以b里面的x没有参数,所以报错# >>> def a():# x = 5# def b():# x *= x# return x# return b()
# >>> a()# Traceback (most recent call last):#   File "<pyshell#34>", line 1, in <module>#     a()#   File "<pyshell#33>", line 6, in a#    return b()#   File "<pyshell#33>", line 4, in b#     x *= x# UnboundLocalError: local variable ‘x‘ referenced before assignment

# >>> def a():# x = 5# def b():# nonlocal x# x *= x# return x# return b()
# >>> a()# 25

# 列表不是放在容器里面的, 所以在b()里面不会报错# >>> def a():# x = [5]# def b():# x[0] *= x[0]# return x[0]# return b()
# >>> a()# 25
# 局部变量和全局变量# >>> c = 5# >>> def b():# c = 10# print(c)
# >>> b()# 10# >>> print(c)# 5# >>> def b():# global c# c = 10# print(c)# >>> b()# 10# >>> print(c)# 10

# def funX():#     x = 5#     def funY():#         nonlocal x    x一直没有被释放 所以一直叠加#         x += 1#         print("x是",x)#         return x#     return funY# a = funX()# print(a())  一直访问funY()# print(a())一直访问funY()# print(a())一直访问funY()
#----------------------------函数的相关内容-------------------------# def add(a,b):   定义函数#   return(a+b)# print(add(4,5))# 11
# >>> def ba(name):# ‘参数的内容‘# print("xxxx"+name+"cccc")
# >>> ba.__doc__# ‘参数的内容‘
# >>> def cc(x,y):# print(x+"-"+y)
# >>> cc("20","1")定义参数标签,防止混淆# 20-1# >>> cc(y="1",x="20")# 20-1
# >>> def cc(x="x",y="y"): 定义默认参数# print(x+"-"+y)# >>> cc()# x-y# >>> cc("1","2")# 1-2# >>>
# >>> def oo(*c):        收集参数# print("参数的长度是:",len(c));# print("第二个参数是:",c[1]);
# >>> oo(1,2,3,4)# 参数的长度是: 4# 第二个参数是: 2
   # >>> def oo(*c,a=1):      收集参数函数里再添加参数# print("参数的长度是:",len(c),a);# print("第二个参数是:",c[1],a);
# >>> oo(7,8,9,10)# 参数的长度是: 4 1# 第二个参数是: 8 1
#------------------匿名函数------------------------------# >>> g = lambda x: x * 2+1# >>> g(5)# 11# >>> g = lambda x,y:x+y# >>> g(5,6)# 11# >>>

# c=list(map(lambda x, y : [x, y], (1, 3, 5, 7,9), (2, 4, 6, 8, 10)))# print(c)# >>> # [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
#------------------递归函数------------------------------# def cc(x):#     a = x#     print("这个a是",a)#     for i in range(1,x):#         print("i是",i)#         a *= i#         print("a是",a)#     print("最后的a是",a)#     return a# # b = int(input("输入一个数字:"))# ff = cc(b)# print("%d 的阶层是 %d"% (b,ff))

# def cc(n):#     print("cc(n)是",n)#     if n == 1:#         return n#     else:#         print("n是",n)#         return n * cc(n-1)# c = int(input("请输入一个正整数:"))# b = cc(c)# print("%d 的阶层是: %d" % (c,b))# 解析# cc(5) = 5 * cc(4)    ↑#  cc(4) = 5 * cc(3)    ↑#   cc(3) = 5 * cc(2)    ↑#    cc(2) = 5 * cc(1)    ↑#     cc(1) = 1            ↑
# def power(x, y):   求x的y次方#     if y:#         return x * power(x, y-1)#     else:#         return 1#     # print(power(3, 3))# 解析# def power(x, y):#     if y:#         return x =3 * power(3, 2) = 9#                         x =3 * power(3, 1) = 3#                                 x=3 * power(3, 0) = 1  这个1是下面那个return返回的1#     else:#         return 1

#------------------递归函数 汉诺塔--------------------# def cc(n,a,b,c):#     if n == 1:#         print(a,"->",c)#         return#     else:#         cc(n-1,a,c,b)     cc(1,a,b,c)       #         cc(1,a,b,c)       cc(1,a,c,b)#         cc(n-1,b,a,c)     cc(1,c,a,b)# b = int(input("请输入盘数:"))# cc(b,"1杆","2杆","3杆")
#------------------过滤器------------------------------# >>> list(filter(None,[1,0,False,True]))# [1, True]

# >>> def odd(x):  筛选奇数# return x % 2# >>> temp = range(10)# >>> show = filter(odd,temp)# >>> list(show)# [1, 3, 5, 7, 9]# >>>
# >>> list(filter(lambda x:x%2,temp)) 和匿名函数结合使用 更简洁# [1, 3, 5, 7, 9]
#------------------map映射------------------------------# >>> list(map(lambda x:x*2,temp))  对每个可迭代元素加工计算,然后返回# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
#----------------------------循环相关内容---------------------------
# while 条件:   while循环, 如果条件为真, 将一直循环# for 目标 in 表达式: 表达式可以是 数组,字符串,  目标 依次循环 表达式# print(xx) 表示打印显示xx内容 ,print(xx , end = " ")  print每次打印 默认换行,end表示结尾做什么,end = " "就表示结尾不换行,用空格代替 len(xx)表示取文本长度"# range(开始数 , 结束数 , 每次递增)  跟for搭配  如: for i in range(1,10,2):# list(range(5)) 表示把参数生产列表,输出[0,1,2,3,4]# 循环体 里 输入 break  可以跳出循环# 循环体 里 输入 continue  可以跳出本局循环,进行下一组循环
#----------------------------字典相关内容-----------------------------# >>> list3={‘李宁‘:‘一切皆有可能‘,‘耐克‘:‘Just do It‘}# >>> print("耐克的口号是:",list3["耐克"])# 耐克的口号是: Just do It


#     也可以是数字# >>> list4={1:"one",2:"two",3:"three"}# >>> list4# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}# >>> list4[1]# ‘one‘
#       创建字典的两个方法# >>> dict3 = dict((("F",70),("i",105),("s",115),("h",104),("c",67)))# >>> dict3# {‘F‘: 70, ‘c‘: 67, ‘s‘: 115, ‘h‘: 104, ‘i‘: 105}# >>> dict4 = dict(小甲鱼="让变成改变世界",耐克="Just do It")# >>> dict4# {‘耐克‘: ‘Just do It‘, ‘小甲鱼‘: ‘让变成改变世界‘}
#       改变字典的内容# >>> dict4["耐克"]="改变一下"# >>> dict4# {‘耐克‘: ‘改变一下‘, ‘小甲鱼‘: ‘让变成改变世界‘}
#       添加字典的内容# >>> dict4["添加"]="添加的内容"# >>> dict4# {‘耐克‘: ‘改变一下‘, ‘添加‘: ‘添加的内容‘, ‘小甲鱼‘: ‘让变成改变世界‘}
#       字典的fromkeys 批量添加# >>> dict1 = {}# >>> dict1.fromkeys((1,2,3))# {1: None, 2: None, 3: None}  没有内容# >>> dict1.fromkeys((1,2,3),(4,5,6))# {1: (4, 5, 6), 2: (4, 5, 6), 3: (4, 5, 6)}  添加内容# >>> dict1.fromkeys((1,2,3),"cc")# {1: ‘cc‘, 2: ‘cc‘, 3: ‘cc‘}# >>> dict1.fromkeys((1,3),"cc")  不能改某个键的值,这样写只能重新创建一个新的字典# {1: ‘cc‘, 3: ‘cc‘}
#----------------字典的 keys和values和items--------------
# 创建字典的几种方法# >>> a = dict(one=1, two=2, three=3)# >>> b = {‘one‘: 1, ‘two‘: 2, ‘three‘: 3}# >>> c = dict(zip([‘one‘, ‘two‘, ‘three‘], [1, 2, 3]))# >>> d = dict([(‘two‘, 2), (‘one‘, 1), (‘three‘, 3)])# >>> e = dict({‘three‘: 3, ‘one‘: 1, ‘two‘: 2})



# >>> dict3 = {}# >>> dict3=dict3.fromkeys(range(3),"赞")# >>> dict3# {0: ‘赞‘, 1: ‘赞‘, 2: ‘赞‘}# >>> for i in dict3.keys():# print(i)
# 0# 1# 2


# >>> for i in dict3.values():# print(i)
# 赞# 赞# 赞
# >>> for i in dict3.items():# print(i)
# (0, ‘赞‘)# (1, ‘赞‘)# (2, ‘赞‘)
#-----------判断值是否在字典中------------# >>> dict3.get(3,"木有!")  判断有没有在字典中, 没有就回复 “木有”  有就回复键对应的值# ‘木有!‘# >>> dict3.get(2,"木有!")# ‘赞‘
# >>> 2 in dict3# True# >>> 3 in dict3# False#----------------清空字典------------# >>> dict3# {0: ‘赞‘, 1: ‘赞‘, 2: ‘赞‘}# >>> dict3.clear()# >>> dict3# {}
# >>> a = {"a":"b"}# >>> a# {‘a‘: ‘b‘}# >>> b = a# >>> b# {‘a‘: ‘b‘}# >>> a={}    这个a = {}也能清空,但是不严谨。但是字典还存在内存中# >>> a# {}# >>> b# {‘a‘: ‘b‘}

# >>> b# {‘a‘: ‘b‘}# >>> a = b# >>> # >>> a# {‘a‘: ‘b‘}# >>> a.clear()   这个a.clear()  才会把字典清除# >>> a# {}# >>> b# {}
#----------------拷贝字典------------# >>> a = {1:"one",2:"two",3:"three"}# >>> b = a.copy()# >>> c = a# >>> a# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}# >>> b# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}           a = c 其实只是给 字典贴了两个便签而已# >>> c# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}# >>> id(a)# 48073992# >>> id(b)# 48191112# >>> id(c)# 48073992

# >>> a# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}# >>> a.popitem()  随机删除# (1, ‘one‘)# >>> a# {2: ‘two‘, 3: ‘three‘}# >>> a.setdefault(5,"小白")     相当于添加# ‘小白‘# >>> a# {2: ‘two‘, 3: ‘three‘, 5: ‘小白‘}# >>> a.pop(5)  指定删除并返回# ‘小白‘# >>> a# {2: ‘two‘, 3: ‘three‘}# >>>

# 把一个字典添加到另一个字典# >>> a = {1: ‘one‘, 2: ‘two‘, 3: ‘three‘}# >>> a.setdefault("小白")# >>> a# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘, ‘小白‘: None}# >>> b = {"小白":"狗"}# >>> a.update(b)        把一个字典添加到另一个字典   # >>> a# {1: ‘one‘, 2: ‘two‘, 3: ‘three‘, ‘小白‘: ‘狗‘}# >>> #----------------------------集合的相关内容------------------------------# 创建集合,集合里每个元素都是唯一的。 没办法索引。# >>> set1 = set([1,2,3,4,5,5])  # >>> set1# {1, 2, 3, 4, 5}        自动去除重复的元素,留下唯一的值# >>> 1 in set1     用in / not in 判断某个元素 是否在集合中# True# >>> "1" in set1# False# >>> set1.add(6)    用add增加某个元素到集合中# >>> set1# {1, 2, 3, 4, 5, 6}# >>> set1.remove(5)   用remove集合中的某个值# >>> set1# {1, 2, 3, 4, 6}
# >>> a = frozenset([1,2,3,4,5])   frozenset集合是不可修改的, 修改将报错# >>> a# frozenset({1, 2, 3, 4, 5})# >>> a.add(0)               修改将报错   # Traceback (most recent call last):#   File "<pyshell#10>", line 1, in <module>#     a.add(0)# AttributeError: ‘frozenset‘ object has no attribute ‘add‘# >>>
# 查看集合数量用len(a)#----------------------------数组相关内容-----------------------------
# 创建列表 如 a = [1,2,3,4,5]# 添加元素到列表 如a.append("xxxx")# 添加列表到列表 如a.extend(["xxx","xxx"])# 添加元素并且选择加入的位置 如a.insert(0,"xxx")# 取数组,如a[0]表示取数组的第一个元素# 删除元素, 如a.remove("xxx")# 删除元素, 如del member[1]  指删除数组第一个# 删除元素, 如member.pop(1)  指删除数组第一个,并且能给剔除的元素命名# 取区间元素, 如a[1:3] 就取1、2的元素。# 取区间元素,设置步长 如a[0:8:2]的意思是。取0 、 2 、 4 、 6 、 8 元素对应的内容# 对列表进行排序 如a.sort(x)# 取列表内某元素的个数, 如a.count(1),查看1在a里面有多少个# 查看列表内某元素索引位置, 如a.index(1,3,10),查看1在a里面的位置,范围是3-10# 翻转列表,a.reverse()# d.sort(),从小到大排序  d.sort(reverse=True) ,反向排序# 清空列表 a.clerr()# 替换元素list1 = [1, [1, 2, [‘小甲鱼‘]], 3, 5, 8, 13, 18]#        list1[1][2][0] = ‘小鱿鱼‘     这就把"小甲鱼"替换成"小鱿鱼"# copy()拷贝一个副本
# 列表间可以判断大小,如a = [123,456]  b = [234,123]  则输入a < b 返回True,只判断第一个元素大小# 如果a + b 则输出[123,456,234,123]# 如果a * 3 则输出[123,456,123,456,123,456]# 另一个表达 d *= 3# 判断某个元素 是否在列表中 ,如123 in a  返回True, 还有123 not in a返回False# 创建一个元组,如a = (1,2,3)  元组是没办法修改里面的元素。如果要修改,有其他方法#      如:a = (1,2,3)#      如:a = a[:1]+("xx",)+a[1:]  ,元素后面要加逗号,不然python会判断为整数或者其他非元素类型#               字符串同, 如:b="I love me"   b = b[:6]+"插入的内容" + b[6:]# 删除整个元组,del a    这就把a这个元组删除# sorted(xx)  对xx列表进行排序# list(reversed(xx))  对xx列表进行翻转# list(enumerate(xx))  输出[(0,1),(1,2),(2,5)]
# a = [1,2,3,4]# b = [7,6,5]# list(zip(a,b))# 输出 [(1,7),(2,6),(3,5)]
# list1=[‘1.Just do It‘,‘2.一切皆有可能‘]# >>> list2=[‘2.李宁‘,‘1.耐克‘]            name、slogan是列表里的变量,name、和slogan会遍历所有列表里的内容。name(0)指遍历所有元素的开头字符串。# >>> list3 = [name + ‘:‘ + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]# >>> for each in list3:# print(each)
# >>> list1=[‘李宁‘,‘耐克‘]# >>> list2=[‘Just do It‘,‘一切皆有可能‘]# >>> print("李宁的口号是:",list2[list1.index("李宁")])# 李宁的口号是: Just do It
# >>> e = [123,["wc","qq"],456]# >>> "wc" in e# False# >>> "wc" in e[1] 访问列表中的元素中的元素# True# >>># >>> e[1][1] 访问列表中的元素的元素 第几项# ‘qq‘
# >>> list1 = [1,3,2,9,7,8]# >>> list2 = list1[:] 仅仅是复制文本,list2不会因为list1的变化而变化# >>> list3 = list1   这个list3会完全复制list1。随着list1的变化而变化# >>> list1.sort() sort排序# >>> list1# [1,2,3,7,8,9]# >>> list2# [1,3,2,9,7,8]# >>> list3# [1,2,3,7,8,9]
# >>> list2 = list1.copy()# >>> list2# [1, [1, 2, [‘小甲鱼‘]], 3, 5, 8, 13, 18]
#          >>> name = member.pop(1)#          >>> name#           "XXX"
# >>> f=list()# >>> f# []# >>> b = "I XXX XXX"# >>> b = list(b)# >>> b# [‘I‘, ‘ ‘, ‘X‘, ‘X‘, ‘X‘, ‘ ‘, ‘X‘, ‘X‘, ‘X‘]# >>>
# >>> max(1,2,3,4,5)   取参数最大值# 5
# >>> min(1,2,3,4,5)   取参数最小值# 1
# >>> c = (1.1,2.2,3.3)# >>> sum(c)# 6.6
# >>> c = (1,2,3)# >>> sum(c,8)# 14#--------------------------------------------------------------------------------#--------------------------------- 系统文件的先关内容 -------------------------------#--------------------------------------------------------------------------------# >>> f = open("E:\\record.txt")# >>> f# <_io.TextIOWrapper name=‘E:\\record.txt‘ mode=‘r‘ encoding=‘cp936‘># >>> f.read()     这里开始输出read.txt里面的内容#‘小客服:.............................‘# >>> f.read()     read就像一个标签一样# ‘‘       再次调用就从文本末尾输出,前面的read没有设置末尾参数,所以直接到末尾。所以到后面的read就什么都读取不到。
# >>> f.close()# >>> f = open("E:\\record.txt")# >>> f.read(5)    读取5个字符# ‘小客服:小‘# >>> f.tell()   tell相当于标签,读取到哪里在哪里, tell的意思是读取字节, 因为一个中文相当于2个字节,所以返回9# 9
# >>> f.seek(2,0)   意思是把只能指到2字节的位置,如果第一是文字,选1字节会报错# 2# >>> f.readline()                      返回一行到指针的位置。# ‘客服:小甲鱼,今天有客户问你有没有女朋友?\n‘   这里从第二个字节开始到一行,所以“小”没有了# >>> f.seek(45,0)# 45# >>> f.readline()# ‘小甲鱼:咦??\n‘

# >>> for i in f:   迭代每一行,官方推荐的方法。# print(i)
# 小客服:小甲鱼,今天有客户问你有没有女朋友?
# 小甲鱼:咦??
# 小客服:我跟她说你有女朋友了!
# .......
# .......
#------------------------写入文本-------------------
# >>> f=open("E:\\yi.txt","w")  写入用w。# >>> f.write("python文件操作命令")  write写入内容,返回写入的字节# 12# >>> f.close()     写入后要关闭, 不然等于未更新状态# >>> 
# >>> (c,b) = [1,2]# >>>  c# 1# >>>  b# 2
# >>> i ="小甲鱼:我靠你的呀"        用split来分割字符串# >>> (c,b) = i.split(":",1)# >>> c# ‘小甲鱼‘# >>> b# ‘我靠你的呀‘#---------------------------------------------------------
# >>> name = "小甲鱼"# >>> ‘鱼‘ in name# True# >>> ‘肥鱼‘ in name# False
# i = i + 1   这个等于  i += 1
# s为字符串
# s.isalnum() 所有字符都是数字或者字母,为真返回True,否则返回False
# s.isalpha() 所有字符都是字母,为真返回True,否则返回False
# s.isdigit() 所有字符都是数字,为真返回True,否则返回False
# s.islower() 所有字符都是小写,为真返回True,否则返回False
# s.isupper() 所有字符都是大写,为真返回True,否则返回False
# s.istitle() 所有单词都是首字母大写,为真返回True,否则返回False
# s.isspace() 所有字符都是空白字符,为真返回True,否则返回False
# 例如:# >>> s = ‘I love xx‘# >>> s.isupper()# >>> True
# int()整数# float()浮点数# str()字符串
# assert 3 > 4 assert称之为"断言" 判断语言 如果是错误的,抛出AssertionError   主要用于检查代码,判断代码 终止,只有条件为真才能进行# small = x if x < y else y   ;  选出最小 如 x , y , z = 1 , 2 , 3  small = x if (x < y and x < z) else (y if y < z else z)
# if else = elif

以上是关于[其他]一些笔记(较乱未整理)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高级程序设计 - 阅读笔记

VS2015 代码片段整理

最全最详细publiccms其他常用代码片段(内容站点)

常用python日期日志获取内容循环的代码片段

关于Linux 网络抓包的一些笔记整理

关于Linux 网络抓包的一些笔记整理