数据类型
基本的数据类型有:数值int、字符串str、列表list、元组tuple、字典dict、集合set
数值:int 、long 、bool、float、complex
Python3中已经将int 、long取缔,只有int一种了
bool中的True、False是关键字,注意这两个字母的书写
在Python中,strings,tuples和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
** 不可更改对象:**就是创建了一个新的对象,重新指向。
list: 类似于C语言中数组
常用方法:L.append(x), L.count(x), L(len), L.enxtend(alist) ,L.index(x) ,L.insert(i,x )
L.pop(i) , L.remove(x) , L.reverse() ,L1=sorted(L) 或者L.sort()
max(L), min(L) ,max(L) 等
a. 访问列表
>>>motorcycles = ['honda', 'yamaha', 'suzuki']
>>>print(motorcycles )
['honda', 'yamaha', 'suzuki'] #原样输出
>>>print(a[0])
honda #第一个元素值
b. 修改,添加和删除元素
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles[0] = 'ducati'
print(motorcycles) #此时第一个元素值已经改变了,可以修改任意位置元素值
添加:追加元素
motorcycles.append('ducati') #在末尾追加了新的元素
print(motocycles)
motorcycles = [] #创建一个空的列表,然后追加元素很常见
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
添加:插入元素
>>>motorcycles.insert(0, 'ducati') #insert()可以在任何位置进行插入数据,需要指定插入数据的索引和值
>>>print(motorcycles)
['ducati', 'honda', 'yamaha', 'suzuki']
删除:del方法
>>>motorcycles = ['honda', 'yamaha', 'suzuki']
>>>del motorcycles[0] #删除第一个元素,del可删除列表中任何位置元素
>>>print(motorcycles)
['yamaha', 'suzuki']
删除:pop()方法
list1.pop(0) #从指定位置删除元素
删除:remove()方法
if 3 in list1:
list1.remove(3) #一般先判断元素在不在列表中,然后再进行删除该元素
清空元素:clear()
list1.clear()
合并两个列表
list1=[1,3,4]
list1.extend([100,200])
print(list1) # [1,3,4,100,200]
c. 列表中的最大值,最小值,求和, 排序
>>>li=list(range(1,101)
>>>print(sum(li))
5050
>>>print(max(li))
100
>>>print(min(li))
1
list2=sorted(list1)# sorted函数 返回列表排序后的拷贝不会修改传入列表
list3=sorted(list1,reeverse=True)
list4=sorted(list1,key=len) #通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表排序
list1.sort(reverse=True) #直接在列表对象上进行排序
字符串:
a. 使用方法修改字符串的大小,使用方法对字符串进行处理
name="ada lovelace"
#首字母大写
print(name.capitalize()) #Ada lovelace
#输出时,单词的首字母大写
print(name.title()) #,结果为: Ada LoveLace
#输出时,都转为大写
print(name.upper())
#都转为小写
print(name.lower())
#计算字符串的长度
print(len(name)) #12,
#从字符串中查找子串的位置
print(name.find('lo')) # 4
print(name.find('sh') # -1
#与find类似但是找不到子串时会引发异常
print(name.index('sh'))
#检查字符串是否以指定字符串开头
print(name.startswith('ad')) #True
print(name.startswith('aj')) #False
b. 拼接使用“+” 加号即可
first_name="ada"
last_name="lovelace"
full_name=first_name+" "+last_name
print(full_name) #输出结果为:ada lovelace
c. 使用制表符和换行来添加空白
>>>print("language:\n\tpython\njava")
language:
python
java
d. 删除空白
可使用rstrip删除右空白,lstrip删除左空白
>>>language='python '
>>>language
'python '
>>>language.rstrip() #只是暂时删除了空白 ,
'python'
>>>language
'python '
>>>language=language.rstrip() #重新给变量赋值,才能永久的删除看空白
>>>language
'python'
e. 使用字符串避免语法错误,注意单引号和双引号的使用
输出:hello ,my name is "hanyanmei"
>>>print('hello,my name is "hanyanmei" '
输出:hello, 'mary',hahah
>>>print("hello , 'mary' ,hahah ")
元组:
元组的元素不可修改,元组顾名思义,就是将多个元素组合到一起形成一个元组
为什么有了列表还要使用元组呢?
因为在多线程环境中,使用不可修改对象易于维护,同时对于线程安全等方面省掉很多同步化的开销。
#定义元组
t=('han',24,True)
#获取元组中的元素
print(t[0])
#遍历元组
for i in t :
print(i)
#给元组赋值
t[0]='meimei' #错误
#变量t重新引用了新的元组 原来的元组已经被垃圾回收了
t=('meimei',24,True)
#将元组转成列表
person=list(t)
print(person)
#将列表转成元组
t=tuple(persion)
集合
Python中的集合和数学中的集合是一致的,不允许有重复的值,但是可以进行交,并,补集运算
#创建集合
set1={1,2,3,3,4}
print(set1) # 1,2,3,4
print(len(set1)) #4
#创建集合的构造器
set2=set(range(1,10))
print(set2) #1,2,3,4,5,6,7,8,9
#创建集合的推导式语法
set3={num for num in range(1,10) if num%3==0}
print(set3) # 3,6,9
#向集合添加元素
set1.add(5)
set2.updata([11,12])
#删除元素
set1.discard(2)
print(set1) # 1,3,4
if 4 in set1:
set1.remove(4)
print(set1) # 1,3
print(set1.pop()) #1
#交集
set1.intersection(set2)
print(set1&set2)
#并集
set1.union(set2)
print(set1 | set2)
#差集
set1.difference(set2)
print(set1^set2)
**字典 **
可以存储任意类型对象,键值对使用冒号分开
#创建字典
score={'han':99,'zhangsan':89}
#创建字典的构造器语法
score1=dict(han=99,zhangsan=89)
#通过zip函数将两个序列压成字典
item1=dict(zip(['a','b'],'12')
print(item1) #结果为{'a':'1','b':'2'}
#通过键可以获得字典中对应的值
print(scores['han']) #99
#遍历字典中的所有键值对
for key in score:
print(f'{key}:{score[keky]}')
#更新字典中的值
score['han']=88
score.update(meimei=100)
#删除字典中元素
print(score.popitem()) #删除字典中最后的键值对
print(score.pop('han',88)
#清空字典
score.clear()
变量
Python是动态类型语言,也就是不需要预先声明变量类型。变量类型和值在赋值时进行初始化。
变量的书写方式:字母数字下划线组成不能以数字开头,且大小写敏感
变量的作用域
作用域一共有4种,分别是:
L (local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (global) 全局作用域
B (build in ) 内建作用域
以L–>E–>G–>B 的规则去查找,即:在局部找不到,便会去局部外的局部去找(例如闭包),再找不到就会去全局找,再者去内建中找。
x=int(2.9) #内建作用域
g_count=0 #全局作用域
def outer():
o_count=1 #闭包函数外的函数中
def inner():
i_count=2 #局部作用域
Python中只有模块,类以及函数才会引入新的作用域,其他的代码块如(if/elif/else ,try/except,for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问的。
注意: 如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。
global和nonlocal关键字
当内部作用域想要修改外部作用域的变量时,global和nonlocal关键字
如果要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量则需要nonlocal关键字
赋值
赋值:不是将一个值赋值给变量,都是将该对象的引用赋值给变量
注1:赋值语句不会返回一个表达式(可以返回值)
>>>x=1
>>>y=(x=x+1) #错误
>>>y=x=x+1 #正确,链式赋值
注2:支持n*=10 ,但不支持自增1或者自减1。
可以使用type检查变量的类型
>>> type(1)
<type 'int'>
Python保留字
and, or , not , in
for , while, break ,continue
if , elif ,else
try, except , finally
from ,import , with ,
class , def , return ,
print ,
global ,
assert , exec ,pass, raise , del ,is ,lambda,yield
符号
加号+ ,减号 -,乘号* ,除号/,乘方 **,整除 //
行和缩进
严格按照缩进
使用 \ 将一行的语句分多行显示