python基础认识
Python基础
一. 简介
Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。豆瓣,Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。
二. 优缺点
优点:优雅、明确、简单、跨平台。
缺点:运行速度慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时。不能加密,如果要发布你的Python程序,实际上就是发布源代码。
三. 应用领域
首选是网络应用,包括网站、后台服务等等;其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;另外就是把其他语言开发的程序再包装起来,方便使用。
四. 安装
在Windows上安装Python,从Python的官方网站下载Python 3.7,特别要注意勾上Add Python 3.7 to PATH
,然后点“Install Now”即可完成安装。安装成功后,打开命令提示符窗口,敲入python后,会出现两种情况:
1:你看到提示符>>>
就表示我们已经在Python交互式环境中了,可以输入任何Python代码,回车后会立刻得到执行结果。现在,输入exit()
并回车,就可以退出Python交互式环境(直接关掉命令行窗口也可以)。
a) 2. ‘python’ 不是内部或外部命令,也不是可运行的程序或批处理文件。这是因为Windows会根据一个Path
的环境变量设定的路径去查找python.exe
,如果没找到,就会报错。如果在安装时漏掉了勾选Add Python 3.7 to PATH
,那就要手动把python.exe
所在的路径添加到Path中。
文件格式:当我们编写Python代码时,我们得到的是一个包含Python代码的以.py
为扩展名的文本文件
解释器:当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
五. 基础语法
1:python 进入交互模式
2:exit() 退出交互模式
3:name=input('plase input') 输入
4:’hello’*3 得到hellohellohello
5:print(‘hello’) 打印字符串输出
6:字符串连接的几种方法
1:print('hello','world') 输出hello world
2:print('hello'+'world') 输出helloworld
3:print('hello''world') 输出helloworld
4:print('%s%s'%('hello','world')) 输出helloworld
str=123 print('%s%s'%('hello',str) 输出helloworld
5:list=['hello','world'] print(''.join(list)) 输出helloworld
7:注释
# 单行注释
‘’’ 内容‘’’或者”””内容””” 多行注释,三个单引或者双引号
六. 数据类型
字符串str、布尔类型bool、整数int、浮点数float、数字、列表list、元组tuple、字典dict、日期datetime
字符串:
使用单引号,双引号,三引号(‘’’)
print('hello\'world') 转义单引号
print(r'hello\'world') 加r表示不转义
print('''hello
world''') #换行
布尔类型:
True ,False,注意大小写
and、or和not运算
七. 空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值
八. 数字类型转换
int(x [,base]) 将x转换为一个整数
float(x ) 将x转换到一个浮点数
str(x) 将对象x转换为字符串
repr(x) 将对象x转换为表达式字符串
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) 将序列s转换为一个元组
list(s) 将序列s转换为一个列表
chr(x) 将一个整数转换为一个字符
unichr(x) 将一个整数转换为Unicode字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串
九. 数字函数
abs(x) 返回数字的绝对值,如abs(-10) 返回 10
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
round(x [,n]) 返回浮点数x的四舍五入值
十. 列表
定义:list = ['Michael', 'Bob', 'Tracy']
长度:len(list)
倒转:list.reverse()
排序list.sort([func])
统计次数:list .count(obj)
找出某个值第一个匹配项的索引位置:list.index(obj)
找出某个值是否存在:obj in list 存在返回True,否则False
循环遍历:for x in list
查找元素:
list[0] 输出 'Michael'
list[-1] 输出 'Tracy'
插入元素:
list.insert(1, 'Jack') 索引号为1的位置插入
list. append ('Jack') 在列表末尾添加新的对象
删除元素:
list.pop() 删除末尾一个元素
list.pop(1) 删除索引为1的元素
del list[1] 删除索引为1的元素
list.remove(obj) 移除列表中某个值的第一个匹配项
替换元素:list[1] = 'Sarah' 替换索引为1的元素为Sarah
十一. 元组
元组与列表类似,不同之处在于元组的元素不能修改;元组使用小括号(),列表使用方括号[];
元组中只有一个元素时,需要在元素后面添加逗号,例如:tup1 = (50,);
元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
定义:tup1 = ('physics', 'chemistry', 1997, 2000);
查找:tup1[2] 输出1997
找出某个值是否存在:obj in tup1 存在返回True,否则False
循环遍历:for x in tup1
个数:len(tup1)
连接:tup1+tup2
删除元组:del tup1 元组值不允许删除
返回元组中元素最大值max(tuple)
返回元组中元素最小值min(tuple)
将列表转换为元组tuple(seq)
十二. 字典
定义:dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'};
修改:dict["age"]=27
增加:dict["school"]="wutong"
删除:
del dict[‘age’] 删除字典元素
dict.clear() 清空
del dict 删除字典
方法:
len(dict) 计算字典元素个数,即键的总数。
str(dict) 输出字典可打印的字符串表示。
type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。
radiansdict.copy() 返回一个字典的浅复制
radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
radiansdict.has_key(key) 如果键在字典dict里返回true,否则返回false
radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys() 以列表返回一个字典所有的键
radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
radiansdict.values() 以列表返回字典中的所有值
十三. 日期和时间
获取时间: time.localtime(time.time())
oneday = datetime.timedelta(days=1)
#今天,2014-03-21
today = datetime.date.today()
#昨天,2014-03-20
yesterday = datetime.date.today() - oneday
#明天,2014-03-22
十四. IF条件语句
age=input()
age=int(age)
if age<10:
print('小')
elif age<100:
print('中')
else:
print('大')
For循环语句
#range()函数,可以生成一个整数序列,再通过list()函数可以转换为list
list=list(range(5))
sum=0
for x in list:
sum+=x
print(sum) #10
十五. while循环语句
sum=0
n=3
while n>0:
sum+=n
n-=1
print(sum)
小提示:break
语句可以在循环过程中直接退出循环,而continue
语句可以提前结束本轮循环,并直接开始下一轮循环。通常都必须配合if
语句使用。
Set去重:set([1, 1, 2, 2, 3, 3]) {1,2,3}
十六. 函数
定义:
一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
空函数:
还没想好怎么写函数的代码,就可以先放一个pass
来作为占位符。
Ex:
# import math
语句表示导入math
包,并允许后续代码引用math
包里的函数。
import math
def mydef(x):
#pass #空函数
return math.ceil(x)
print(mydef(1.25))
十七. 切片截取
List[0:3]
表示,从索引0
开始取,直到索引3
为止,但不包括索引3
。即索引0
,1
,2
,正好是3个元素。
十八. 迭代循环
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values()
,如果要同时迭代key和value,可以用for k, v in d.items()
。
enumerate
函数可以把一个list变成索引-元素对
ex;for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
十九. 判断数据类型
isinstance(data, (int, str, types.LongType, float)) True/False
type(obj) 返回数据类型
列表生成式
条件循环生成
s=[x*x for x in range(5) if x%2==0]
print(s) #[0, 4, 16]
双重循环生成
s=[m+n for m in 'ABC' for n in 'XYZ']
print(s) #['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
二十:高阶函数:
一个函数接收另一个函数作为参数,还可以把函数作为结果值返回
Ex: def add(x,y,f):
return f(x)+f(y)
print(add(1,-1,abs)) #2
map()
:传入的函数依次作用到序列的每个元素,结果作为新的Iterator返回。
print(list(map(str,[1,2,3]))) #将数组数字转化为字符串
reduce()
:把结果继续和序列的下一个元素做累积计算
from functools import reduce
def fn(x,y):
return x*10+y
print(reduce(fn,[1,2,3])) #将数组元素合并成123
filter()
:用是从一个序列中筛出符合条件的元素,和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
def not_empty(s):
return s and s.strip() #去除空字符串
print(list(filter(not_empty,['1','',None]))) #['1']
sorted()
函数就可以对list进行排序,参数分别是list,处理函数,反向排序
sorted(['bob', 'Zoo', 'Credit'], key=str.lower, reverse=True)
函数对象有一个__name__属性,可以拿到函数的名字
二十一:面向对象类和实例
类:
定义类是通过class
关键字,class后面紧接着是类名,类名通常是大写字母的开头的单词,紧接着就是(object)
,表示该类是从哪个类继承下来的,通常如果没有合适的类,就是用object类,这是所有类最终都会继承的类。
Ex:class Student(object):
pass
实例:
定义好了Student
类,就可以根据Student
类创建出Student
的实例,创建实例是通过类名+()实现的
Ex:bart=Student()
注意1:由于类起到模板的作用,因此可以在创建实例的时候,把一些我们认为必须要绑定的属性强制写进去,通过定义一个特殊的__init__
方法,在创建实例的时候,就把name
,score
等属性绑上去
构建:class Student(object):
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print(‘%s: %s’ %(self.name: self.score))
访问:
Lisa=Student(‘lisa’ , ’88’)
Lisa.name //lisa
Lisa.print_score()
修改:
Lisa.score=’99’
print(Lisa.score) //99
注意2:注意到__init__
方法的第一个参数永远是self
,表示创建的实例本身,因此,在__init__
方法内部,就可以把各种属性绑定到self
,因为self
就指向创建的实例本身。
有了__init__
方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__
方法匹配的参数,但self
不需要传,Python解释器自己会把实例变量传进去。
注意3:类是创建实例的模板,而实例则是一个个具体的对象,各个实例拥有的数据都互相独立,互不影响。方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据。对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称可能不同。
二十二:面向对象访问限制
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__
,在Python中,实例的变量名如果以__
开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
Ex:class Student(object):
def __init__(self,name):
self.__name=name