python小笔记

  1 python特点
  2     python使用缩进
  3     多个语句在一行使用;分隔
  4     注释为#,多行注释doc string()
  5 cmd的pip安装
  6     pip install selenium #安装
  7     pip list #查看安装了哪些包
  8     pip uninstall selenium #卸载
  9     py -3 -m pip install selenium #python安装在python3.0上
 10     
 11 打印
 12     print("hello"," ","world");
 13     name=input("输入你的名字");
 14     print(name);
 15     
 16 数据类型
 17     整数 int
 18     浮点数 float
 19     布尔值 bool
 20     空值 None
 21     type{a} #查看a的变量类型
 22     
 23 变量赋值(不区分单双引号)
 24     a=100            #int
 25     b="test"        #字符串
 26     x=y=z=1            #多重赋值
 27     x,y,z=1,2,"str" #多元赋值
 28     int(a);str(a);    #类型转换
 29     
 30 运算符
 31     3 * 5                
 32     3 ** 2            #乘方
 33     5 / 2
 34     5%2
 35     "hello"+"world"
 36     10 // 3    ;        #整除,返回值为帧整数部分;
 37 
 38 注释:
 39     单行注释#
 40     多行注释
 41         """
 42         注释内容
 43         """
 44 转义
 45     \
 46     \n 换行
 47     \也可以续行,表示没有输完
 48     
 49 字符串
 50     print("%d(x)是一个数字,%s(y)是一个字符串"%(x,y));
 51     %d(data)打印数字
 52     %s(string)打印字符串
 53     如果无法确定种类种类则用%r
 54     l=[1,2,3]
 55     print("这个列表的内容是%r" % l )
 56     
 57 字符串操作
 58     #比如a="abc";b="cde"
 59     +    字符串连接
 60     *    字符串重复输出 a*2 ,输出aa
 61     []    索引,a[0]="a",a[-1]="c"
 62     [ : ]
 63     in
 64     not in 
 65     r/R
 66     %   格式字符串
 67     
 68 字符串常见函数方法
 69     L=['a','b','c'];
 70         "".join(L)         #拼接成abc
 71         "_".join(L)     #拼接成a_b_c
 72     L="a,b,c"
 73         L.split(",")    #换成list类型,以,分割
 74     str.endswith(obj,beg=0,end=len(string));
 75     
 76     A="abcdefdasd1";
 77         A.find('1');
 78         "_".join(A);     #输出'a_b_c_d_e_f_d_a_s_d_1'
 79         len(A)            #11
 80         A.replace("a","A");#'AbcdefdAsd1'
 81         A.split("a");         #['', 'bcdefd', 'sd1']
 82         A.strip('a');        #左右各处理掉a字符,'bcdefdasd1'
 83         A.startswith('a',0,len(A));     #true
 84         
 85 列表list
 86     赋值、索引
 87         A[1][1]取索引为1的元素中的索引为1的元素
 88     基本操作
 89     切片,从左边开始取值
 90         比如A=[1,2,3,4,5]
 91         A[1:3] 表示取值为A[1],A[2]
 92         A[x:y] 表示取值A[x]到A[y-1]这个范围内
 93         A[0:-2]从最左边取值到最右倒数第二个但不包含这个数,这里就是[1, 2, 3, 4]
 94 
 95 list函数
 96     len(list)
 97     max(list)/min(list)
 98     list(seq) 元祖转换为列表
 99     
100 list方法
101     list.append(obj);        列表末尾添加新的对象
102     list.count(obj);        对指定元素计数
103     list.extend(seq);        插入序列类的东西到末尾,比如字符串,list
104     list.index(obj);        找到某个元素的位置
105     list.insert(index,obj);    在指定位置插入
106     list.pop(index);        删除某元素
107     list.remove(obj);        删除某元素
108     list.reverse();            反序
109     list.sort();            排序
110     list.clear();            清空
111     list.copy();            建立副本
112     list.strip()         方法用于移除字符串头尾指定的字符(默认为空格)
113 
114 
115 元祖tuple
116     特色:
117     1、和list相似,最大的不同元祖是一种只读且不可读的数据结构
118     2、不可替代元祖中的所有元素,至刻度不可更变
119     3、list与tuple可以相互转换,tuple(list)、list(tuple)
120     
121     赋值:
122     h=(2,[3,4],(23112,2));    #多维列表
123     h=(1,)                    #一个元素时必须要打逗号,因为h=(1)与h=1一致。
124     
125 字典:Dict
126     a={'x':3,    'y':4,    'z':5    }
127     #x就是key不能为数字;3表示value值;和json格式相似
128     a['xx']=333; #表示又插入一个键为'xx',值为'333'的元素;
129                 #结果是a字典就是{'x': 3, 'y': 4, 'z': 5, 'xxx': 2333}
130                 
131                 
132     字典的函数方法:
133         dict.clear()
134         dict.copy();
135         dict.get(key,None);        #返回指定键的值,若没有返回"None"
136         key in dict
137         dict.items()            #以列表返回可遍历的(键,值)元祖数组
138         dict.keys()                #以列表返回一个字典所有的键
139         dict.setdefault(key,None)#和get()相似,但如果键不存在字典中,会添加一个key键,值为None
140         dict.update(dict2)        #把字典dict2的键/值对更新到dict里
141         dict.values()            #返回字典中所有的值;
142         dict.pop(key,None)        #删除键Key对应的值,返回被删除的值,key值不存在返回None。如果Key不存在,又没有默认值,则报错。
143         
144 条件语句
145 if y>0:
146     print("y>0")
147 elif y==0:
148     print("y==0")
149 else:
150     print("y<0")
151 ################
152 布尔表现式---逻辑操作符and、ornotinnot in
153 a=2;b=4;c=6
154 if b>=a and b<=c:
155     print("b is between a and c")
156     
157 if not (b<a or b>c):
158     print("b is still between a and c")
159 ######################
160 while语句
161 i=5
162 while i>0:
163     print("ss")
164     i=i-1
165     
166 ######################
167 For语句
168 for i in [3,4,10,25]:
169     print(i)
170 
171 for i in "helloworld":
172     print(i)
173     
174 for i in range(10):    #i从0取到9 
175     print(i)
176     
177 A=[]
178 for j in [3,4,5,6]:
179     A.append(j**2)
180 
181 
182 range(1,10)            #从1取到10
183 range(1,10,2)        #从1取到10,每隔2取一次值
184 
185 
186 #######################
187 控制流终止
188     continue
189     break
190     
191     
192     
193     
194     
195     
196 ###############################
197 函数
198     def语句
199     def 函数名(参数1,参数2,参数3)
200         语句块
201 
202 def divide(a,b):
203     q=a/b
204     r=a-q*b
205     return q,r
206 
207 #调用
208 x,y=divide(42,5)    #x=8,y=2
209 x=divide(42,5)        #x=(8,2)是tuple元祖
210 
211 def add(a,b=2):        #a为位置参数,b为默认参数、默认取值为2。默认参数在位置参数之后
212     s=a+b
213     return s
214 
215 def fenshu(name,socre=90):
216     print('%s的分数为%d'%(name,score)) 
217 
218     
219 #调用分数
220 fenshu('张三',)
221 t=('李四',80)
222 fenshu(*t)    
223     
224 ###############
225 #1、可变参数
226 def func(*a):        #如果输入为1,23,4,4,5;那么a=(1,23,4,4,5)元祖
227     sum=0
228     for n in a:
229         sum=sum+n
230     return sum
231     
232 def fenshu(name,socre=90):
233     print('%s的分数为%d'%(name,score)) 
234 
235     
236 #2、可变参数
237 fenshu('张三')
238 t=('李四',80)
239 fenshu(*t)    
240     
241     
242 #################################################    
243 关键字参数
244 def func(**kw)
245 可变参数允许传入0或者任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许我传入0~任意个含参数名的参数,这写关键字参数在内自动组装为一个dict。与可变参数相同,需要使用dict的操作方法来操作dict
246 
247 在调用函数时,我们可以将参数组装成dict,通过func(**dict)的方式传参
248 def func(name,age=20):
249     print("%s age is %d"%(name,age))
250 
251 p={'name':'bob','age':27}
252 func(**p)
253 
254 参数组合
255     顺序为位置参数、默认参数、可变参数和关键字参数,形式:
256 def func(para,para2=None,*agrs,**kw)
257 #################################################    
258 类、对象
259 class Person():
260     def __init__(self,name,age):  #初始化,绑定实例属性,特殊的方法,类似于java的构造函数,第一个参数必须是self
261         self.name=name
262         self.age=age
263 1、继承
264 class Count():
265     def __init__(self,a,b):        #初始化类的属性
266         self.a=a
267         self.b=b
268     def add(self):                #类中的方法,第一个参数必须是self
269         return self.a+self.b
270 
271 count = Count(3,5);    #实例化对象,是否传参取决于__init__
272 count.add();        #调用对象的方法
273 
274 class Father():        #表示无继承父类,或者说这是继承基类
275     def add(self,a,b):
276         return a+b
277 
278         
279 class Son(Father):
280     def div(self,a,b):
281         return a-b
282 >>> son=Son();        #实例化对象
283 >>> son.add(3,5)
284 >>> son.div(3,5)
285 
286 ##########################################################
287 异常
288 try:
289     open("abc.txt",'r')
290 except IOError:
291     print "异常了!"
292 
293 try:
294     print aa
295 except NameError:
296     print "这是一个 name 异常!"    
297 
298 
299 try:
300     open("abc.txt",'r')
301     print aa
302 except BaseException:
303     print "异常了!"    
304 所有的异常类有了新的基类 BaseException,Exception 同样也继承BaseException,所以我们也可以使用 BaseException 来接收所有的异常。
305 
306 try:
307     print(s)
308 except NameError:
309     print("异常")
310 finally:
311     print("没有异常") #finally如何都都会被执行
312     
313 try:
314     print(s)
315 except NameError:
316     print("异常")
317 else:
318     print("没有异常") #try正确才会执行
319 ###读取文件#######################################################
320 #coding=utf-8
321 import  time
322 
323 files =open('C:/Users/Lee/Desktop/test01.txt','r')
324 try:
325    # print(str)
326     for l in files:
327         print(l)
328      #   time.sleep(1)
329 finally:
330     #files.close()
331     print ('Cleaning up ...closed the file')
332 #######################################
333 
334 
335 
336 ######################################
337 
338 引入包
339 import time
340 print(time.ctime())
341 
342 引入自己写的模块
343 
344 
345 ##########################导入写的模块的路径
346 import sys
347 sys.path.append('C:\\test\\WorkSpace_Python\\Learn0904')
348 print(sys.path)
349 print(sys)
350 
351 
352 ###################################
353 open/文件操作
354 f=open('/tmp/hello','w')
355 
356 #open(路径+文件名,读写模式)
357 
358 #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式        
359 读写模式的类型有:
360 
361 rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
362 w     以写方式打开,
363 a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
364 r+     以读写模式打开
365 w+     以读写模式打开 (参见 w )
366 a+     以读写模式打开 (参见 a )
367 rb     以二进制读模式打开
368 wb     以二进制写模式打开 (参见 w )
369 ab     以二进制追加模式打开 (参见 a )
370 rb+    以二进制读写模式打开 (参见 r+ )
371 wb+    以二进制读写模式打开 (参见 w+ )
372 ab+    以二进制读写模式打开 (参见 a+ )        
373 
374 
375 #举例:读取文件
376 f=open('C:/Users/Lee/Desktop/123.csv','r+')
377 str=f.readlines()
378 
379 for i in str:
380     print(i)
381 f.close()
382 
383 #举例:读取csv文件
384 import csv
385 file1=open('C:/Users/Lee/Desktop/actual.csv','r+')
386 csv_reader=csv.reader(file1)
387 print(type(csv_reader))
388 for row in csv_reader:
389     print(type(row))
390     print(row[1])
391 file1.close()
392 
393 #写入文件
394 f=open('C:/Users/Lee/Desktop/111.csv','a+')
395 num=[1,2,3,4,5]
396 char=['a','b','c','d','e']
397 
398 l=[]
399 for i in range(len(num)):
400     m=str(num[i])+','+char[i]
401     l.append(m)
402 f.write(str(l)+'\n')
403 f.close()
404 
405 #写入csv文件,这里的row_all是获取到的数据库的内容,为元祖
406 l=list(row_all)
407 f=open('D:/123.csv','a+',newline='')
408 writer=csv.writer(f)
409 num=len(l)
410 for i in range(num):
411     writer.writerow(l[i])
412 f.close()
413 
414 
415 #####################################python发送邮件
416 #coding=utf-8
417 import smtplib
418 from email.mime.text import MIMEText
419 from email.header import Header
420 
421 #发送邮箱
422 sender='lihujun101@163.com'
423 #接受邮箱
424 receiver=['316947664@qq.com']
425 
426 #发送主题
427 subject='测试'
428 #发送邮箱的服务器地址
429 smtpserver='smtp.163.com'
430 #发送邮箱用户/密码
431 user='lihujun101@163.com'
432 pwd='li1992hujun'
433 
434 #邮件正文
435 msg=MIMEText('<html><h1>你好!!!'
436              '</h1><a href="http://baidu.com">这是一个链接</a></html>','html','utf-8')
437 msg['From']='李胡军'#可以写出来表示发件人名字
438 msg['To']='316947664@qq.com'
439 msg['Subject']=Header(subject,'utf-8')
440 
441 smtpObj=smtplib.SMTP(smtpserver,25)
442 
443 smtpObj.login(user,pwd)
444 smtpObj.sendmail(sender,receiver,msg.as_string())
445 
446 ########################################################################
447 ###带附件发送邮件
448 #coding=utf-8
449 import smtplib
450 from email.mime.multipart import MIMEMultipart
451 from email.mime.text import MIMEText
452 from email.header import Header
453 
454 #发送邮箱
455 sender='lihujun101@163.com'
456 #接受邮箱
457 receiver=['316947664@qq.com']
458 
459 #发送主题
460 subject='测试'
461 #发送邮箱的服务器地址
462 smtpserver='smtp.163.com'
463 #发送邮箱用户/密码
464 user='lihujun101@163.com'
465 pwd='li1992hujun'
466 
467 #邮件正文
468 msg=MIMEMultipart()
469 msg.attach(MIMEText('<html><h1>你好!!!'
470              '</h1><a href="http://baidu.com">这是一个链接</a></html>','html','utf-8'))
471 
472 msg['From']='李胡军'#可以写出来表示发件人名字
473 msg['Subject']=Header(subject,'utf-8')
474 
475 
476 #附件
477 fj='C:\\Windows\\addins\\FXSEXT.ecf'
478 att=MIMEText(open(fj,'rb').read(),'base64','utf-8')
479 att["Content-Type"]= 'application/octet-stream'
480 att['Content-Disposition']='attachment; filename="test"'
481 msg.attach(att)
482 
483 #发送
484 smtpObj=smtplib.SMTP(smtpserver,25)
485 smtpObj.login(user,pwd)
486 smtpObj.sendmail(sender,receiver,msg.as_string())
487 
488 ###################################################################################
489 
490 
491 
492 
493 
494 #####lambda函数
495 f=lambda x:x*2
496 '''
497 用 lambda 来声明匿名函数,冒号(:)前面 x 表示入参,冒号后面 x*2 表示返回值。lambda 和普通的函数相比,省去了函数名称,“匿名函数”也是由此而来。
498 '''
499 等价于
500 def f(x):
501     return x*2
502 
503     
504 #######################################取出文件夹中最新的文件
505 #coding=utf-8
506 import os
507 
508 #定义文件目录
509 lists=os.listdir('D:\\123')
510 
511 #按时间排序
512 lists.sort(key=lambda fn:os.path.getmtime('D:\\123\\'+fn))
513 
514 print('最新文件为:'+lists[-1])
515 lists.sort()
516 print(os.path.getmtime('D:\\123\\'+lists[-1]))
517 print(lists)
518 
519 ##########################################################
520 from urllib import request
521 
522 with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
523     data=f.read()
524     print('状态:',f.status,f.reason)
525     for k ,j in f.getheaders():
526         print('%s %s'%(k,j))
527     print('数据:',data.decode('utf-8'))
528 
529 req=request.Request('http://www.douban.com/')
530 req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
531 with request.urlopen(req) as m:
532     print('状态1:',m.status,m.reason)
533     for k,j in m.getheaders():
534         print('%s :%s' %(k,j))
535     print('数据1:',data.decode('utf-8'))
536 
537 
538 可以直接作用于for循环的数据类型有以下几种:
539     一类是集合数据类型,如list、tuple、dict、set、str等;
540     一类是generator,包括生成器和带yield的generator function。
541     这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
542     
543 生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。
544     可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
545     可以使用isinstance()判断一个对象是否是Iterator对象:
546     
547     
548 map函数/refuce函数/filter函数
549 >>>list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
550 ['1', '2', '3', '4', '5', '6', '7', '8', '9']
551 
552 reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
553 
554 def is_odd(n):
555     return n % 2 == 1
556 
557 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
558 # 结果: [1, 5, 9, 15]
559 
560 >>> sorted([36, 5, -12, 9, -21], key=abs)
561 [5, 9, -12, -21, 36]
562 
563 
564 列表生成式:
565 >>> [x * x for x in range(1, 11)]
566 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
567 
568 等价于:
569 >>> L = []
570 >>> for x in range(1, 11):
571 ...    L.append(x * x)
572 ...
573 >>> L
574 
575 
576 
577 闭包:相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”
578     返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
579     
580     
581 匿名函数
582 lambda x: x * x
583 等价于
584 def f(x):
585     return x * x
586     
587     
588     
589 装饰器:
590     这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
591 
592 
593 Python作用域:
594     1、正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等
595     2、类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;
596     3、类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等597     之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
598     
599     
600 获取对象信息:
601 1、使用type()判断对象类型
602 2、使用isinstance('aaa',str)判断对象类型
603 3、使用dir()获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list
604 >>> type(123)
605 <class 'int'>
606 >>> type('str')
607 <class 'str'>
608 >>> type(None)
609 <type(None) 'NoneType'>
610 >>> isinstance([1, 2, 3], (list, tuple))
611 True    
612 >>> hasattr(obj, 'x') # 有属性'x'吗?
613 True
614 >>> obj.x
615 9
616 >>> hasattr(obj, 'y') # 有属性'y'吗?
617 False
618 >>> setattr(obj, 'y', 19) # 设置一个属性'y'
619 >>> hasattr(obj, 'y') # 有属性'y'吗?
620 True
621 >>> getattr(obj, 'y') # 获取属性'y'
622 19
623 >>> obj.y # 获取属性'y'
624 19    
625     
626     
627     
628 给一个实例绑绑定方法,但是对另外的实例无效
629 >>> def set_age(self, age): # 定义一个函数作为实例方法
630 ...     self.age = age
631 ...
632 >>> from types import MethodType
633 >>> s.set_age = MethodType(set_age, s) # 给实例绑定一个方法
634 >>> s.set_age(25) # 调用实例方法
635 >>> s.age # 测试结果
636 25
637     

 

posted @ 2017-11-29 22:38  来呀快活吧  阅读(569)  评论(0编辑  收藏  举报
cs