注释
在python中,用 # 作单行注释
用三引号作多行注释(三个单引号或者三个双引号)
#单行注释
#单行注释
'''
多行注释
多行注释
多行注释
'''
print 输出
print输出是默认换行的
x=1
y=2
#换行输出
print(x)
print(y)
#不换行输出
print(x,y)
字符串
s="abcdefg"
print(s)
如果想获取字符串中的某一段子串,用 [头下标:尾下标] 来截取相应字符
s="abcdefg"
print(s[2:5]) #输出第三到六个字符,即 cdef
print(s[2:]) #从第三个字符还是输出
print (s*2) #连续输出字符串两次
print (s+"123") #输出 abcdefg123
列表
列表用 [ ]
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾
a=[1,2,3,4,5]
s=['a','b','c','d']
print(a[:])
print(s[:])
print(a[-1])
print(a+s)
使用append()添加元素
list1=[] #空列表
list1.append('a')
list1.append('b')
print(list)
'''
输出
['a','b']
'''
使用del删除列表中的元素
list=['a','b','c']
del list[1]
print(list)
'''
输出
['a','c']
'''
元组
元组类似于列表
元组用 ()标识
元组不能二次赋值,相当于只读列表
a=(1,2,3,4,5)
s=('a','b','c','d')
print(a)
print(s)
print(a+s)
元组只包含一个元素时,需要在元素后面加逗号
tup1 = ()
tup = (1,)
元组的元素值是不允许删除的,但是可以用del 删除整个元组
无关闭分隔符
任意无符号的对象,以逗号隔开,默认为元组
print('abc',123,'def')
字典
列表是有序对象的集合,字典是无序对象的集合
字典当中的元素是通过键值来存取的,而不是通过偏移
字典用 { } 标识
创建时,如果同一个键被赋值两次,将记住后一个的值
键必须不可变,所以可以用数字,字符串或元组充当,用列表就不行
zi = {'name':'Tom','age':'two','address':'home'}
zi['name'] = 'James' #修改
zi['sex'] = 'man' #添加
print(zi) #输出完整字典
print(zi.key) #输出全部的键
print(zi.value) #输出全部的值
del zi['sex'] #删除sex条目
zi.clear() #清空所有条目
del zi #删除整个字典
数据转换
只需要将数据类型作为函数名即可
int(x)
long(x)
float(x)
str(x) #转成字符串
ord(x) #将一个字符转成整数
hex(x) #将一个整数转成十六进制的字符串
oct(x) #将一个整数转成八进制的字符串
运算符
a**b :结果为a的b次幂
a//b :结果为a/b的商的整数部分
逻辑运算符
and 与
or 或
not 非
成员运算符
in :如果在序列中,找到指定值,则返回true,否则返回false
not in :如果在序列中,找不到指定值,则返回true,找到则返回false
list = [1,2,3,4,5]
a = 10
b = 20
if(a in list)
print('a is in list')
else
print('a is not in list')
if(b not in list)
print('b is not in list')
else
print('b is in list')
身份运算符
is :判断两个标识符是不是引用自同一对象
is not : 判断两个标识符是不是引用自不同对象
如果两个标识符的类型相同,且值相等,则为引用自同一对象
a = 20
b = 20 #此时 id(a) == id(b)
if(a is b) # 结果为 true
print('true')
b = 30
if(a is b) #结果为 false
print('flase')
条件语句
if 判断条件1:
执行语句1
elif 判断条件2:
执行语句2
else:
执行语句3
循环语句
python 提供 for 和 while 循环语句
没有do … while
while 判断条件:
执行语句
while…else在循环条件为false时,执行else语句
( 执行一次else语句后,会退出循环,执行后面的语句,通过break语句中断,则不会执行else语句 )
while 判断条件1:
执行语句1
else:
执行语句2
for 循环
1.通过序列索引迭代
fruit = ['apple','banana','mango']
for a in fruit:
print(a)
'''
输出:
apple
banana
mango
'''
fruit = ['apple','banana','mango']
for a in range ( len ( fruit ) ):
print( fruit[a] )
'''
输出:
apple
banana
mango
'''
for…else语句
若不符合for循环的条件,则退出for循环,执行else语句
(若通过break语句中断循环,则不会执行else语句)
fruit = ['apple','banana','mango']
for a in range ( len ( fruit ) ):
print( fruit[a] )
else:
print('that is all')
'''
输出
apple
banana
mango
that is all
'''
pass语句
pass 是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句。
def sample(n_samples):
pass
该处的 pass 便是占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容时,可以用 pass 填充,使程序可以正常运行。
del语句
del var
将某一变量删除
a = 10
print(a)
del a
print(a) #会报错
python 的 math、cmath模块
要使用模块,必须先引入
import math
import cmath
字符串格式化
基本用法是将一个值插入到有%s 或%d 的字符串中
print('my name is %s and my age is %d' % ('Tom',12))
'''
输出
my name is Tom and my age is 12
'''
三引号
使用三引号,允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符
a = ''' hello
world'''
'''
输出
hello
world
'''
日期和时间
time 和 calendar 模块可以格式化日期和时间
import time
ticks = time.time() #获取时间戳
print(ticks)
获取当前时间
import time
ticks = time.time()
localtime = time.localtime(ticks)
print(localtime)
'''
输出
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=29, tm_hour=16, tm_min=42, tm_sec=19, tm_wday=2, tm_yday=120, tm_isdst=0)
'''
获取格式化时间
import time
ticks = time.time()
localtime = time.localtime(ticks)
asctime = time.asctime(localtime)
'''
输出
Wed Apr 29 16:44:41 2020
'''
格式化日期
import time
strftime = time.strftime('%Y-%m-%d %H-%M-%s',time.localtime())
print(strftime)
'''
输出
2020-04-29 16-49-13
'''
获取某月日历
import calendar
cal = calendar.month(2020,4)
print(cal)
'''
输出
April 2020
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
'''
函数
定义函数:
以关键字def开头,后接标识符名称和圆括号()
def function (parameter):
执行语句
return [expression]
不可更改对象: 字符串,整型,元组
(字符串类型和整型更改值的话,相当于删除原来的对象,然后重新生成一个对象)
可更改对象: 字典,列表
参数传递
参数如果是不可变类型,则相当于值传递,只是将值复制过去,对于对象本身没有影响
参数如果是可变类型,则相当于引用传递,对于对象本身会有影响
参数传递采用关键字传递
使用关键字传递,允许函数调用时,参数的顺序和声明不一致
def func(age,name):
print('age: ',age)
print('name: ',name)
return
func(name='tom',age=12)
'''
输出
age: 12
name: tom
'''
不定长传递
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数
def func(arg1,*arg):
print(arg1)
for a in arg:
print(a)
return
func(1,2,3,4)
匿名函数
使用lambda创建匿名函数
lambda的主体是一个表达式
sum = lambda arg1,arg2 : arg1 + arg2
print(sum(10,20))
模块
模块是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块的引入
import module1
from…import语句
from…import语句能从模块中导入指定的部分
如导入math模块的sin函数:
from math import sin
将模块的全部内容导入
from module import *
在函数中使用全局变量
money = 2000
def func():
money = money + 1
return
func()
print(money)
#输出 2001
dir函数
一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。
import math
print(dir(math))
'''
输出
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
'''
globals() 和 locals() 函数
如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。
如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。
两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。
reload() 函数
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。
Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 _init_.py 文件, 该文件的内容可以为空。_init_.py 用于标识当前文件夹是一个包。
当首次调用包中的文件时,会首先调用_init_.py文件
Python 与 Excel 实战
import openpyxl, pprint
wb = openpyxl.load_workbook('check.xlsx') # 打开excel文件
sheet = wb['Sheet1'] # 获取人口统计sheet工作表
countyData = {} # 定义统计结果保存字典
print('reading...')
for row in range(2,sheet.max_row+1): # 从文件第二行开始读取数据,直至最后一行
state = sheet['B' + str(row)].value # 读取数据
county = sheet['C' + str(row)].value # 读取数据
pop = sheet['D' + str(row)].value # 读取数据
countyData.setdefault(state, {})
countyData[state].setdefault(county,{'tracts':0,'pop':0})
countyData[state][county]['tracts'] += 1 # 该县人口普查次数加一
countyData[state][county]['pop'] += int(pop) # 该县所有普查次区人口数量相加
print('writing results...')
resultFile = open('result.py','w')
resultFile.write(pprint.pformat(countyData)) # pprint生成一个字符串,打印已经格式化好的,有效的python代码
resultFile.close()
print('Done')
Python 自然语言处理
import jieba
f = open('')
txt = f.read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if(len(word) == 1) :
continue
elif word == '诸葛亮' or word == '孔明' : # 排除人物重复的情况
rword = '孔明'
else :
rword = word
counts[word] = counts.get(word,0) + 1
personlist = ['孔明','曹操','刘备'] #列出人物表
items = list(counts.items())
items.sort(key = lambda item: items[1] , reserve = True) # 按照降序排列
for i in range(20):
word, count = items[i]
if personlist.count(word) > 0 :
print("{0:<10}{1:>5}".format(word,count))