python-基础笔记
环境配置
sublime text
{
"cmd": ["C:/Users/duan/AppData/Local/Programs/Python/Python37/python.exe","-u","$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"env": {"PYTHONIOENCODING": "utf8"}, //解决输出乱码问题
"selector": "source.python",
}
字符串输出
n = 123
f = 456.789
s1 = 'Hello, world'
s2 = 'Hello, \'Adam\''
s3 = r'Hello, "Bart"'
s4 = u'''Hello,
Lisa!'''
print(n)
print(f)
print(s1)
print(s2)
print(s3)
print(s4)
获取当前环境编码
sys.getdefaultencoding()
ASCII 与 字符串的转换
ord() chr()
print(ord('中'))
print(ord('A'))
print(chr(20013))
print(chr(65))
u/U:表示unicode字符串
不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。
一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u;但是中文, 必须表明所需编码, 否则一旦编码转换就会出现乱码。
建议所有编码方式采用utf8
r/R:非转义的原始字符串
与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
以r开头的字符,常用于正则表达式,对应着re模块。
b:bytes
python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes
python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序,
Windows 系统会忽略这个注释;
格式化输出
print('%.2f'%0.223213123123) 保留俩位小数点
%2d 使输出的int型的数值以2位的固定位宽输出。如果不足2位,则在前面补空格;如果超过2位,则按实际位数输出
%s 字符串
print('%d %s %.2f'%(1,'a',3.44))
字符串 encode decode 转换
print('中文'.encode('gb2312'))
print(b'\xd6\xd0\xce\xc4'.decode('gb2312'))
list
len(list) 数组个数
list[2] 正序
list[-2] 倒序
list.append('aaa') 往数组添加内容
list.insert(2,'aa') 向指定的位置添加内容
list.pop() 默认删除末尾
list.pop(number) 要删除的位置
二维数组?
tupl 表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
a=(1,2,['a','b'])
print(a)
a[2][0]=2
print(a)
if for
# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[x for x in L1 if isinstance(x,str)]
# 期待输出: ['hello', 'world', 'apple']
print(L2)
a=['1','2','3']
for i in a:
print(i)
num=0
while a:
try:
print(a[num])
except:
pass
num=num+1
lambda x: x * x
set 可以看成数学意义上的无序和无重复元素的集合,因此,两个 set 可
以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
定义函数
定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用 return 随时返回函数结果;
函数执行完毕也没有 return 语句时,自动 return None 。
函数可以同时返回多个值,但其实就是一个 tuple。
isinstance 判断数据类型
def echod(*number):
for i in number:
print(i)
echod(1,2,3,4,5,6,'99')
def echod(name,age,**kw):
print(name,age,kw)
c={'w': 1, 'd': 2}
echod('echod','20',**c)
定义函数的时候可以使用
*args 列表遍历, **kw 字典遍历
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
map 依次执行函数
filter() 只返回true false 根据条件回显
关于类
class Animal(object):
def run(self):
print('Animal is running...')
class Dog(Animal):
pass
class Cat(Animal):
pass
class Tortoise(Animal):
def run(self):
print('Tortoise is running slowly...')
Tortoise().run()
类可以继承, 子类的函数若与父类的函数相同 覆盖父类的函数
子类继承父类
继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类
只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。
isinstance(h,class) 判断对象是否属于类
lower() 字符串小写
hasattr(class,'x') 检测是否有该x属性
getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值 404
404
数据封装、继承和多态只是面向对象程序设计中最基础的 3 个概念。在
Python 中,面向对象还有很多高级特性,允许我们写出非常强大的功能。
我们会讨论多重继承、定制类、元类等概念。
python 错误处理 Exception 捕捉报错信息
try:
bar('0')
except Exception as e:
print('Error:', e)
finally:
print('finally...')
Python 内置的 try...except...finally 用来处理错误十分方便。出错时,
会分析错误信息并定位错误发生的代码位置才是最关键的。
程序也可以主动抛出错误,让调用者来处理相应的错误。但是,应该在
文档中写清楚可能会抛出哪些错误,以及错误产生的原因。
每次都这么写实在太繁琐,所以,Python 引入了 with 语句来自动
帮我们调用 close() 方法:
with open('/path/to/file', 'r') as f:
print(f.read())
这和前面的 try ... finally 是一样的,但是代码更佳简洁,并且不必调
用 f.close() 方法。
for line in f.readlines():
print(line.strip())


浙公网安备 33010602011771号