python基础
相关概念
包
是组织一系列相关类和接口的一个命名空间。从概念上理解,可以将包理解成与计算机上不同的文件夹相似。
运算
使用两个*表示乘方运算。
>>> 3**29
拼接
str将非字符串转成字符串。
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
数据结构
list(列表)
如:
bicycle = ['mobike','永久','小黄车','blue'];
curd
- 取最后一个元素
bicycle[-1]
- 列表末尾添加新元素
bicycle.append('999')
- 插入元素
bicycle.insert(0,'哈啰单车'); //0 代表列表索引
- del删除元素【知道其索引】
del bicycle[0]
- pop删除元素
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.pop([index=-1])
obj -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
append和pop结合可以做栈,遵循LIFO
- remove根据值删除元素
bicycle.remove('mobike')
注意:remove()只删除第一个指定的值。如果需要删除所有,需要自己循环判断。
- 切片
创建切片,指定要使用的第一个元素和最后一个元素的索引。
print(bicycle[0:3])
print(bicycle[:3]) # 未指定第一个元素,默认0
print(bicycle[0:]) # 未指定做后一个元素,默认终止索引
print(bicycle[:])
遍历切片
for value in bucycle[0:2]:
print(value.title)
复制列表
list = bicycle[:]
sort
- sort()方法对列表排序【按ASCII码排序】,永久性的修改列表的排列顺序。
sort(bicycle)
- sorted()对列表进行临时排序
new_bicycle = sorted(bicycle) //new_bicycle和bicycle结果不一样
reverse
反转列表元素的排列顺序,永久性修改列表顺序。
bicycle.reverse()
len 长度
len(bicycle) 获取列表长度。
in 检查特定值是否在列表中
'blue' in bicycle # True
反之 not in
元祖
Python将不能修改的值称为不可变的,而不可变的列表称为元祖。
元祖看起来跟列表差不多,但使用圆括号标识。可以像列表一样去查询获取元素。
list = (1,2,3,4,5)
print(list[0])
元素不可修改,但可以修改元祖变量。
list = (1,2,3)
list = (3,4,5)
字典
字典是一系列键值对。使用键可以访问值。
alien = {'color':'green','points':5}
print(alien['color'])
字典是一种动态结构,可随时添加键值对。
alien['x_position']=0
alien['y_position']=1
创建空字典:alien = {}
删除键值对:
del alien['points']
遍历字典 for k,v in list.items():
for key,val in alien.items():
print('key:'+key+'\n')
print('value:'+val)
keys()获取字典所有键
for key in alien.keys():
print(key.title)
按顺序遍历字典中所有键
for key in sorted(alien.keys()):
print(key.title)
values() 获取字典所有值
字典列表
字典作为列表的元素
list = [ alien0, alien1, alien2 ]
除此之外,字典可嵌套字典。
逻辑表达式
- if
if condition:
do something
elif condition:
do something
else
do something
condition结果bool型 True False
检查是否相等区分大小写,如果不区分大小写。可以:
car = 'Audi'
car.lower() == 'audi'
and 检查多个条件,全部需命中
or 检查多个条件,一个命中
- while
不断的运行,直到条件不满足为止
break 退出循环
continue 跳过本次操作
在遍历列表的同时取修改数据,使用while更方便。
如:删除包含特定值的所有列表元素
perts = ['dog','cat',dog','goldfish','cat','rabbit','cat']
print(perts)
while 'cat' in perts:
perts.remove('cat')
print(perts)
如:用户输入来填充字典
reponse = {}
polling_active=True
while polling_active:
name = input("\nwhat's your name")
res = input("which mountain would you like to climb someday")
reponse[name] = res
repeat = input("Would you like let another person repond?(y/n)")
if repeat=='n'
polling_active = False
print("\n -- poll reponse")
for name,res in reponse:
print("name: "+name+" res:"+res)
输入输出
input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,python将其存储在一个变量。
message = input("tell me your name")
print("welconme,"+message)
运算符
% 取模 / 取余
函数
定义函数
关键字def定义
def getuser():
//函数体
- 使用任意数量的关键字实参
# 形参**user_info 代表键值对构成的字典
def build_profile( first, last, **user_info ):
main函数
定义的main()函数只有当该Python脚本直接作为执行程序时才会执行
if __name__ == '__main__':
main() #执行体
导入文件函数
- import pizza 打开pizza.py,并将其中所有的函数复制到当前程序中。
使用某个函数:pizza.function_name()
- 导入特定函数
from moudle_name import function_name
多个函数
from moudle_name import function_0,fuction_1,function_2
调用函数:moudle_name.function_name
- 使用as给函数指定别名
from pizza import make_pizza as mp
调用函数:mp(1,2)
- 使用as给模块指定别名
import pizza as p
调用函数:p.make_pizza(1,2)
- 导入模块中的所有函数
from pizza import *
调用函数:
make_pizza(1,2)
文件操作
- 创建一个包含文件各行内容的列表
使用关键字with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外访问文件的内容,可在with代码块内将文件存储在一个列表中,并在with代码块外使用该列表。
filename = 'pi_digits.txt'
with open(filename) as file_object: #file_object 文件对象
lines = file_object.readlines() # readlines()读取文件每一行存储到列表中
for line in lines:
print(line.rstrip()) #rstrip()删除首尾空格
要以每次一行的方式检查文件,可对文件对象进行for循环处理:
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
打开读取文件,内容显示在屏幕上
filename = 'pi_digits.txt'
with open(filename) as file_object:
contents = file_object.read() #read() 读取文件内容
print(contents)
关键字with不再访问文件后会关闭文件,无需显示调用close(),这样避免在程序出错,没有关闭文件。
- 写入空文件
filename = 'programmering.txt'
with open(filename,'w') as file_object:
file_object.write("I love programmering")
open第二个实参是打开的模式,'w'是写入模式,'r'是读取模式,'a'是附加模式,'r+'是读取写入模式,默认以只读模式打开。
python只能将字符串写入文本文件。要将数值存储到文本文件中,必须使用str()转换为字符串格式。
json
- json_dump 数据存储到文件中
import json
numbers = [2,3,5,7,13]
filename='numbers.json'
with open(filename,'w') as f_obj:
json_dump(numbers,f_obj);
- json_load 数据存储到内存中
import json
filename='numbers.json'
with open(filename,'w') as f_obj:
numbers = dump.load(f_obj)
print(numbers)
程序间进行数据交互可以使用。
range()
- 使用range()轻松生成一系列数字。
# 依次打印1到5的数字
for value in range(1,5)
print(value)
- 利用range()创建数字列表
number = list(range(1,5))
min 、max 、sum
min(number)
max(number)
sum(number)
int、float
int()将字符串转换为int
float()将字符串转换为float
比如当从文件中国读取文件获得一个数字,就需要转换使用。
md5
import hashlib
def get_token():
md5str = "abc"
#生成一个md5对象
m1 = hashlib.md5()
#使用md5对象里的update方法md5转换
m1.update(md5str.encode("utf-8"))
token = m1.hexdigest()
return token
时间处理
import datetime
#获取当前日期和时间:
now_time = datetime.datetime.now()
#格式化成我们想要的日期:strftime()
datetime.datetime.now().strftime('%Y-%m-%d')
#格式“小时”:
now_hour=add_hour.strftime('%H')
#在当前时间增加1小时:
add_hour=datetime.datetime.now()+datetime.timedelta(hours=1) #需要导入timedelta库
# 时间对象,时间字符串,时间戳 处理
#字符串转datetime:
>>> string = '2014-01-08 11:59:58'
>>> time1 = datetime.datetime.strptime(string,'%Y-%m-%d %H:%M:%S')
>>> print time1
2014-01-08 11:59:58
#datetime转字符串:
>>> time1_str = datetime.datetime.strftime(time1,'%Y-%m-%d %H:%M:%S')
>>> time1_str
'2014-01-08 11:59:58'
#时间戳转时间对象:
>>>time1 = time.localtime()
>>>time1_str = datetime.datetime.fromtimestamp(time1)
时间格式:
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
类
calss Dog():
"""备注""""
name
//构造函数
def __init__( self, name ):
self.name = name
def eat():
#函数体
修改属性的方式有三种:使用类的实例来修改;类中的方法来修改;使用方法进行递增(指定特定的值)
继承
class Person(object): # 定义一个父类
def talk(self): # 父类中的方法
print("person is talking....")
class Chinese(Person): # 定义一个子类, 继承Person类
def walk(self): # 在子类中定义其自身的方法
print('is walking...')
导入
from car import Car #从car.py导入Car类
from car import Car, ElectricCar #导入多个类
import car #导入整个模块
from moudle_name import * #导入模块所有的类
异常
未对异常进行处理,程序将停止运行,并显示一个traceback(包含有关异常的报告),反之程序可以继续运行。
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero")
//pass #pass跳过异常,充当占位符,提醒程序什么都不做
- 主动抛出异常
raise语句 主动抛出异常。 格式: 主动抛出异常终止程序 raise 异常名称(‘异常描述’)
raise RuntimeError('testError')
单元测试
单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试。
构建工具setup.py
安装依赖包,类似php composer
https://www.cnblogs.com/maociping/p/6633948.html
注意
- 避免缩进错误。python根据缩进来判读代码行与前一个代码行的关系。
- 类的编码风格,类名使用驼峰命名法,即类名单词首字母大写,实例名和模块名小写格式,并在单词间使用下划线。
- python 包就是文件夹,但该文件夹下面必须有个__init__.py 文件