---------------个人学习笔记---------------
----------------本文作者疆--------------
------点击此处链接至博客园原文------
Python擅长的领域
web开发:django、pyramid、tornado、bottle、flask、webpy
网络编程:twisted、requests、scrapy、paramiko
科学计算:scipy、pandas、ipython
GUI图形开发:wxpython、pyqt、kivy
运维自动化:openstack
学习规划
1.编译型语言(一次将全部代码转换为机器语言--可执行文件)和解释型语言(逐行解释、执行),编译型语言执行速度更快。
2.Python是一个动态解释性的强类型定义语言(强制数据类型定义的语言,变量不经过强制转换则永远为原来的数据类型)。
3.Python开发效率高、高级语言、可移植性、可扩展性、可嵌入性,其缺点为速度慢、代码不能加密、线程不能利用多CPU问题,即Python的多线程无法利用多核优势并发执行。
4.Python解释器:CPython(默认下载)、IPython、PyPy(执行更快,动态编译而非解释)、Jython、IronPython。
5.Python2.7后不再更新Python2标准库,官方支持到2020/4,Python3不完全兼容Python2,有部分改动,如库名变更、print语句、字符编码等。
6.若想在linux系统中类似于执行shell脚本一样执行python程序(windows中不行),如./hello.py,需要在文件头部指定解释器 #! /usr/bin/env python(即寻找Python环境变量),还需要先赋予执行权限,chmod 755 xx.py (赋予所有用户读写权限)。
7.Pycharm中配置模板:File---Settings---Editor---File and Code Templates---Python Script中添加模板,每次新建Python脚本将自动添加自定义模板。
8.Pycharm中的一些快捷方式:右键Run 'xx'运行当前脚本、脚本右键Refactor---Rename改名、shift+tab 撤销缩进、ctrl+/选中多行同时注释、shift+f9对当前脚本debug、ctrl+r变量名替换。
9.变量赋值疑难问题及解释
第1个例子 a1指向0的内存地址,a2通过a1指向0的内存地址,当a1赋新值后,a2仍指向0的内存地址,而与a1的取值无关。
# -*- coding:utf-8 -*- # Author: WUJiang # 变量赋值疑难问题 a1 = 0 a2 = a1 print(a1, a2) # 0 0 a1 = 1 print(a1, a2) # 1 0 而不是 1 1
第2个例子 -----------------指向列表的指针,列表元素修改则跟着修改。
# -*- coding:utf-8 -*- # Author: WUJiang a_list = [0, 1, 2, 3] b_list = a_list # b_list: [0, 1, 2, 3] a_list[0] = 1 # a_list: [1, 1, 2, 3] print(b_list) # b_list: [1, 1, 2, 3] # 结论:b_list列表随着a_list的改变而改变,因为指向的是列表的内存地址(指针) # 避免这个问题可以用copy函数 a_list = [0, 1, 2, 3] b_list = a_list.copy() # b_list: [0, 1, 2, 3] a_list[0] = 1 # a_list: [1, 1, 2, 3] print(b_list) # b_list: [0, 1, 2, 3]
10.保留字段不能声明为变量名:and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,pass,print,raise,return,try,while,with,yield。
11.字符编码
Python解释器在加载.py文件中的代码时,会对内容进行编码。
默认ASCII,美国标准信息交换代码,主要用于现代英语和其他西欧语言(用8位表示),最多能表示255个符号,预留了128个符号,但是128符号不足以对其余字符(如中文汉字)编码,因此需要额外扩展其他编码(预留128个符号可用于保存内存地址指针,比如某个汉字在某一范围内,指针指向去查编码表,如GB2312)。
由于ASCII码无法将世界上各种文字和符号全部表示,所以,需要一种可以表示所有字符和符号的编码:Unicode(统一码、万国码、单一码)为每种语言中每个字符设定了统一且唯一的二进制编码,规定所有字符和符号最少由16位(2字节)表示.
UTF-8,是对Unicode编码的压缩和优化,其不再最少使用2个字节,而是将所有字符和符号进行分类,ASCII码中的内容用1个字节表示,欧洲字符用2个字节表示,东亚字符用3个字节表示......
Python3字符集支持中文,默认UTF-8编码,而Python2默认ASCII编码,处理中文需指定UTF-8编码。
12.用户输入
Python2中 raw_input与Python3中的input等效,统一将输入转换为str数据类型,若需要整形数字可再强制类型转换。
Python2中input,接收什么数字类型就是什么类型,如接收数字1就认为输入为整形,str数据类型需加“”,否则报错。(建议不要轻易用)
# Python2 # 输入姓名必须加引号,如"wujiang",而Python3中只需要输入wujiang name = input("enter your name:") print(name)
13.格式化输出(%s、format等)
# -*- coding:utf-8 -*- # Author: WUJiang # 格式化输出 name = input("enter your name:") age = input("enter your age:") info = '''-----info of %s----- Name:%s Age:%s ''' % (name, name, age) print(info)
%s为%string,同样可以用%d、%f,但需保证对应变量的类型是一致的。
# -*- coding:utf-8 -*- # Author: WUJiang # 格式化输出 name = input("enter your name:") age = input("enter your age:") info = '''-----info of {_name}----- Name:{_name} Age:{_age} '''.format(_name=name, _age=age) print(info) name = input("enter your name:") age = input("enter your age:") info = '''-----info of {0}----- Name:{0} Age:{1} '''.format(name, age) print(info)
14.(标准库)getpass模块 getpass.getpass("xxxx:") 输入密文不可见,但其在pycharm用不了,需在终端下执行该.py文件。
# -*- coding:utf-8 -*- # Author: WUJiang # getpass需在终端中使用 import getpass pw = getpass.getpass("password:") print(pw)
15.if-elif-else条件判断与while、for循环,while、for还能和else搭配。
# -*- coding:utf-8 -*- # Author: WUJiang # while与else age = int(input("age:")) while age < 30: print("你还年轻,还可以从头再来") break else: print("你虽然年纪大了,但大佬们也是你这个年纪起步的!")
for循环常与range()搭配。
# for与else for i in range(3): print("loop:", i) else: print("loop stop")
16.break与continue
break跳出(所在循环的)整个循环,continue跳出本次(当前)循环进入下次循环。
for i in range(0, 100, 2): if i % 5 == 0: print(i) # break break只会print 0 # continue 而continue会print 0 10 20 30 40 50 60 70 80 90
多个循环嵌套时,break跳出其所在的整个循环。
for i in range(3): print("---------", i) for j in range(3): if j < 3: print(j) else: # continue continue与break在此输出等效 break # break 跳出所在的整个循环 # --------- 0 0 1 2 # --------- 1 0 1 2 # --------- 2 0 1 2 # break 这个break才会跳出整个程序的循环