- 在Linux或Mac平台直接运行.py文件,像window系统中的.exe文件一样,window系统会自动忽略这句话
#!/usr/bin/env python3
- 告诉Python解释器,按照UTF-8编码读取源代码
# -*- coding: utf-8 -*-
- Python允许用 r"" 表示 " 内部的字符串默认不转义
str = r"abc/t/n"
print(str)
# 打印内容 abc/t/n
-
Python允许用’’’…’’'的格式表示多行内容,且里面的内容不会被转义
-
ASCII编码和Unicode编码、UTF-8编码的区别
ASCII 编码,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号。 但随着编程语言的发展,各个国家都有自己制定的编码,像GB2312(中国),Shift_JIS(日本)等编码,ASCII码表里的字符远远支持不了开发。 所以,Unicode编码就应运而生,Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。 Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。 但是,现在出现了这样一个问题 A 在ASCII码表里表示的是01000001,而在Unicode里表示的是00000000 01000001,如果我们书写的内容是全英的,就会十分浪费内存。 故UTF-8编码应运而生。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节, 常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节
字符 ASCII Unicode2 UTF-8 A 01000001 00000000 01000001 01000001 中 - 00000000 01000001 11100100 10111000 10101101 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时 候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
-
Python提供了 ord() 函数获取字符的整数表示,chr() 函数把编码转换为对应的字符:
str = '中'
print(ord(str))
print(chr(97))
# 20013 a
-
str通过 encode() 方法可以编码为指定的bytes,Python对bytes类型的数据用带 b 前缀的单引号或双引号表示。
byte转换为str,使用 decode() 方法, 如果bytes中只有一小部分无效的字节,可以传入 errors=‘ignore’ 忽略错误的字节:
str = "我愛你中國"
print(str.encode("utf-8")) #b'\xe6\x88\x91\xe6\x84\x9b\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9c\x8b'
b = b'\xe6\x88\x91\xe6\x84\x9b\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9c\x8b\xaa'
print(b.decode("utf-8", errors="ignore")) #我愛你中國
- Python 使用 % 或者 format 进行格式化字符串,使用%进行格式化,对于字符串里面包含%的str,使用“%%”进行转义
print("%s,您好,%s" % ("Scott","欢迎光临"))
print("{0}的小数点前两位是{1:.2f}".format("PI",3.1415926))
print("%s今年的数学成绩提高了%.2f%%" % ("小明",(86-72)/72*100)) #小明今年的数学成绩提高了19.44%
- 可变参数,*+变量名表示可变参数,可变参数在函数调用时自动组装为一个tuple
def addNum(*num):
sum=0;
for i in num:
sum += i
return sum
- 关键字参数,允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。使用 **+变量名 表示关键字参数
- 命名关键字参数,参数需要一个特殊分隔符 *,*后面的参数被视为命名关键字参数。
def person(name, age, *, city='Beijing', job):
print(name, age, city, job)
- 切片,list,tuple,str都可以被切[start : end : step]
[:] 获得所有元素
[index:-1] 从后往前切
[::step] 每隔step切
- Python内置的 enumerate函数可以把一个list变成索引-元素对
# 遍历字典
for key, value in dict.items():
print(key,value)
# 遍历列表并且有索引
for index, item in enumerate(num):
print(index,item)
- 列表生成式
l1 = [i ** 2 for i in range(11)]
list1 = [i if i % 2 == 0 else -i for i in range(10) ]
list2 = [i**3 for i in range(15) if i%2==0]
- 生成器,使用 () 或者yield关键字
- isinstance(item,type)用来判断item是否属于type类型的
- map(function,iterable),map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
- reduce,把一个函数作用在一个序列[x1, x2, x3, …]上,reduce把结果继续和序列的下一个元素做累积计算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
- nonlocal n 声明变量n为 非内部函数的局部变量,可以引用外部定义的变量(基本数据类型),这样内部修改的话其变量,就不会报错了
- 匿名函数lambda x: x * x
关键字lambda表示匿名函数,冒号前面的x表示函数参数
- @functools.wraps 可以保持当前装饰器去装饰的函数的 name 的值不变
def printNowTime(func): functools.wraps(func); def printTimeLog(*args, **kwargs): print("the %s() execute time is %s" % (func.__name__, time.process_time())) func(*args, **kwargs); return printTimeLog;
functools.partial
的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单def decoratorLog(func): @functools.wraps(func) def wrapp(*args, **kwargs): print("call %s()" % (func.__name__)); func(*args, **kwargs) return wrapp;