python基础

2019/04/01 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代码块外使用该列表。 ```python 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循环处理:
```python
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 文件

Search

    Table of Contents