Python_day2_基础知识

执行过程

首先来说下python的执行过程:

  1. python解释器读取源代码到内存中
  2. 解释器进行词法语法检测
  3. 解释器将源代码翻译成字节码
  4. 将字节码交由python虚拟机执行

Note:.pyc文件就是字节码的文件存储。python解释器会优先执行pyc文件。如果源码
文件修改时间较新,则会执行源码并重新生成pyc文件。

三元运算

如果if条件表达式成立,变量A=值A。否则值A=值B
变量A = 值A if ... else 值B

运算符

数学运算符:

运算符 描述
+
-
*
/
% 求模-返回余数
** 幂-返回x的y次方
// 取商的整数部分

比较运算符:

运算符 描述
== 等于,比较值
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

赋值运算符:

运算符 描述
= 赋值,如 x = 10
+= x += y 等同于 x = x + y
-= x -= y 等同于 x = x - y
*= x *= y 等同于 x = x * y
/= x /= y 等同于 x = x / y
%= x %= y 等同于 x = x % y
**= x **= y 等同于 x = x ** y
//= x //= y 等同于 x = x // y

逻辑运算符:

运算符 描述
and
or
not

成员运算符:

运算符 描述
in 如果x是y的成员,返回True
not in 如果x不是y的成员,返回True

同一性运算符:

运算符 描述
is 判断是否是同一个引用地址,即id(x) 与 id(y) 是否相等
is not 判断是否不是同一个引用地址

注意:
这里容易和 == 混淆。==是判断值相等。而is是判断
是否是指向同一个内存地址

优先级:

编码

为什么会有编码问题?
因为计算机最早只支持255个字符,即ASCII编码,只包括大小写字母,数字还有一些符号,然后根本没有考虑外国人。
后来很多国家都搞了自己使用的编码。然后混乱了!
后来,出来了万国码unicode。它包含世上所有的字符,终结编码混乱的局面。
再后来,出来了utf-8.在兼顾编码统一的情况下,可以更加节省存储成本。

再来说说Python:
因为python2.x默认使用了ASCII编码。所以默认打印中文乱码。这里要显示指定使用utf-8来存储代码。
# -*- coding: utf-8 -*-

编码转换:
python2.x: 首先要先将编码转换成unicode,然后在转换成gbk等
python3.x: 默认使用unicode编码。所以在转换编码时,直接转换成gbk等编码了。

对象,对象,对象

结论:

  1. 一切皆对象
  2. 对象是由类创建的。
  3. 对象具有的功能都是从类里找的
x = 0 # x = int()
x = '' # x = str()
x = [] # x = list()
x = () # x = tuple()
x = {} # x = dict()

int内部功能介绍

Note: 3.x中没有long类型。统一为int

常用方法:

  • __abs__ # 返回绝对值,可以直接调用abs()
  • __add__ # 3+2的加号就是调用的这个方法
  • __bool__ # 返回True 或 False
  • bit_length() # 返回当前数的最小位数(二进制)
  • __divmod__ # 返回一个由商和余数组成的元组
In [160]: divmod(10,3)
Out[160]: (3, 1)
  • __eq__ # 判断两个数的值是否相等
In [161]: s = 19
In [162]: s.__eq__(20)
Out[162]: False
  • __float__ # 转换成浮点型
  • __floordiv__ #只保留商的整数部分
In [170]: s
Out[170]: 19
In [171]: s.__floordiv__(3)
Out[171]: 6
In [172]: 19 / 3
Out[172]: 6.333333333333333
  • __or__ # 等同于a|b
  • __pow__ #幂运算
  • __rdivmod__

字符串

定义:使用一对单引号或一对双引号括起来的一串字符。当字符含有单引号或双引号时,需使用 \ 来转义。
多行字符串:使用一对"""'''来生成多行字符串。

转换字符串:str()

声明及使用:

声明:

>>> my_str = 'hello world'
>>> print(my_str)
'hellow world'

字符串重复:

>>> '123' * 2
'123123'
>>> ('abc' * 2) + '123'
'abcabc123'

字符串拼接:
使用 '+', 但是这种方式浪费内存,效率也不高。推荐使用格式化字符串。

字符串格式化:
使用 %s

>>> print('Hello,%s.' %('wang'))
'hello,wang.'

遍历字符串:
字符串是可迭代对象:

s = 'abcde'
for i in s:
    print(i)

使用索引打印:

>>> s = 'abcde'
>>> s[0]
'a'

字符串切片:

>>> s = 'abcde'
>>> s[:2]
'ab'
>>> s[-2:]
'de'

字符串替换:
使用 replace()

>>> s = 'hello world'
>>> s.replace('world','hello')

字符串查找:

  • S.index(sub[, start[, end]])
 >>> s = 'abca'
 >>> s.index('a')
 0
 >>> s.index('a',1)
 3
  • find()
    • 和 index() 用法一样. 但是在找不到时返回 -1,而 index() 找不到会报错
  • rindex()
    • 反向查找
>>> s = 'abca'
>>> s.rindex('a')
3
  • rfind()
    • 反向查找

字符串分割:
可以用split,rsplit方法,通过相应的规则来切割成生成列表对象

>>> s = 'a b c d e'
>>> s.split() # 默认使用空格,可以指定其他
['a', 'b', 'c', 'd', 'e']
>>> s.split('b')
['a ', ' c d e']
>>> s.

S.splitlines([keepends]) #把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后会保留行分割符。

>>> s = 'a\nb\nc\n'
>>> s.splitlines()
['a', 'b', 'c']
>>> s.splitlines(True)
['a\n', 'b\n', 'c\n']

字符串反转:

>>> s = 'abc'
>>> s[::-1]
'cba'

字符串的join方法:

>>> s = 'abc'
>>> ' '.join(s)
'a b c'
>>> s = ['a','b','c']
>>> ''.join(s)
'abc'
>>> '_123_'.join(s)
'a_123_b_123_c'

使用len()计算字符串长度:
>>> len('abc') # 返回3

字符串大小写
S.upper()#S中的字母大写
S.lower() #S中的字母小写
S.capitalize() #首字母大写
S.istitle() #S是否是首字母大写的
S.isupper() #S中的字母是否全是大写
S.islower() #S中的字母是否全是小写
S.swapcase() #大小写互换
S.title()

>>> 'abc'.upper()
'ABC'
>>> 'ABC'.lower()
'abc'
>>> 'abc'.capitalize()
'Abc
>>> 'abc'.istitle()
False
>>> 'abc'.isupper()
False
>>> 'abc'.islower()
True
>>> 'aBc'.swapcase()
'AbC'
>>> 'who am i'.title()
'Who Am I'

字符串去空格:
strip(),lstrip(),rstrip()方法默认去除字符串的空格,可以指定去除其他字符。
S.strip()去掉字符串的左右空格
S.lstrip()去掉字符串的左边空格
S.rstrip()去掉字符串的右边空格

>>> ' abc'.lstrip()
'abc'
>>> 'abc '.rstrip()
'abc'
>>> ' a b c '.strip() # 只去掉字符串两头的空格
'a b c'

字符串其他方法:
字符串还有很多玩法可以折腾,如:
S.center(width[, fillchar]) #字符串居中

>>> s = 'abc'
>>> s.center(20)
'        abc         '
>>> s.center(20,'*')
'********abc*********'

S.count(substr, [start, [end]]) #计算substr在S中出现的次数
>>> 'aabc'.count('a') # 返回2

S.encode() #编码,默认utf-8

S.expandtabs(tabsize=8) #将tab转换成空格

>>> s
'\tabc'
>>> ss = s.expandtabs()
>>> ss
'        abc'

S.endswith() #判断尾字符
>>> 'abcd'.endswith('d') # 返回True

S.isalnum() #是否全是字母和数字,并至少有一个字符

>>> 'abc'.isalnum() # 返回True 
>>> '23ab'.isalnum() # 返回True
>>> '_23ab'.isalnum() # 返回False
>>> ''.isalnum() # 返回False

S.isalpha() #是否全是字母,并至少有一个字符

>>> 'abc'.isalpha()
True
>>> 'abc_'.isalpha()
False

S.isdigit() #是否全是数字,并至少有一个字符

>>> '123'.isdigit()
True
>>> '123_'.isdigit()
False

S.isspace() #是否全是空白字符,并至少有一个字符
>>> ' '.isspace() # 返回True

S.rpartition() #返回分隔符本身,和前后的子字符串

>>> s
'who am i'
>>> s.rpartition('am')
('who ', 'am', ' i')
>>> s.rpartition('is') # 如果分隔符没有找到,则返回两个空字符串和s
('', '', 'who am i')

S.startswith() # 判断首字符
>>> 'abcd'.startswith('ab') # 返回True

查看详细的字符串方法
>>> dir('str')

列表

列表存储的是N个元素,类型任意,通过下标(索引)返回对应值。
特点:

  1. 有序
  2. 下标从0开始

常用方法:

  • 列表通过索引(下标)获取数据,索引从0开始。如 new_list[0] 为1
  • append(object) 往列表末尾添加元素
  • clear() 清空列表所有元素
  • copy() 浅拷贝

Note: 还有一种深拷贝。浅拷贝还有一定联系。而深拷贝可以理解成是一个完全独立的复制体。

  • count(value) 统计指定元素出现几次
  • index(value,[start,[stop]]) 查找指定元素第一次出现的下标
  • insert(index,object) 将元素插入指定位置
  • pop([index]) 默认删除列表最后一个元素
  • remove(value) 删除第一次出现的元素
  • sort() 对列表的元素进行排序
  • extend(iterable) 将iterable中的元素添加到列表中

元组

元组是列表的一个子集。元组有的方法列表都有。
特点:

  • 不可变

Note: 不可变性只适用于元组本身顶层而非内容

创建元组:

t = (1,2,3,) 等价于 t = 1,2,3,
#要注意最后有一个逗号,当只有一个元素时,一定要有逗号。
In [192]: type((1))
Out[192]: int

In [193]: type((1,))
Out[193]: tuple

方法:

  • count()
  • index()
  • 切片操作

列表元组转换:

In [187]: tuple(l)
Out[187]: (1, 2, 3)

In [188]: t = (1,2,3,)

In [189]: list(t)
Out[189]: [1, 2, 3]

字符串转元组:

In [190]: s = 'hello'

In [191]: tuple(s)
Out[191]: ('h', 'e', 'l', 'l', 'o')

字典

字典存储的是N个键值对(k:v). 键的类型为字符串或数字,值的类型任意。
特点:

  1. 无序
  2. 键唯一

创建字典:

第一种:  
d=dict{) #创建一个空字典
d={'tom':‘cat’,001:23}
d['tom']------取出30,一种映射关系
第二种:
>>> items=[('name','wzl')]
>>> dict(items)
{'name': 'wzl'}
>>> d=dict([('name','yuan'),('job','stu')])
第三种:
>>> d = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
>>> d
{'a': 1, 'c': 3, 'b': 2}

字典基本操作:

d={'tom':‘cat’,001:23}

d['tom'] #取值

d['tom'] = 20 #如果key存在,更新‘tom'所对应的值;如果key不存在,则为添加

遍历字典:
可以遍历keys(),values(),items()

dic = {'k1':'v1,'k2':'v2','k3':'v3'}

for k in dic.keys():    #打印所有的key
    print(k)

for v in dic.values():  #打印所有的value
    print(v)

for k,v in dic.items(): #打印所有的key:value
    print(k,v)

打印value,并自动添加序号,数字表示从1开始,默认为0
for i,v in enumerate(dic.values(),1):
    print(i,v)

常用方法:

  • clear(),清空所有键值对
  • copy(),浅拷贝
  • fromkeys(),创建一个新字典:从一个可迭代对象获取元素作为key,并且value设为同一值
>>> d = {}
>>> d.fromkeys([1,2,3],'hello')
{1: 'hello', 2: 'hello', 3: 'hello'}
  • get(k[,d]),获取k对应值,如果k不存在,默认返回None。可通过d来指定返回值
>>> d = {1: 'hello', 2: 'hello', 3: 'hello'}
>>> d.get(1)
'hello'
>>> d.get(5) #d.keys()没有5,返回None
>>> d.get(5,100)
100

  • items(),a set-like object providing a view on D's items
  • keys(),a set-like object providing a view on D's keys
  • pop(k,d=None),删除指定的k。如果k不存在,且d=None,返回KeyError
d = {1: 'hello', 2: 'hello', 3: 'hello'}
d.pop(1)
d.pop(100) #KeyError
d.pop(100,'invalid') #返回’invalid'
  • popitem(),删除任一键值对,并以元组的形式返回。如果字典为空,则抱KeyError
  • setdefault(k,d=None),同get(k,d=None)。只不过当k不存在时,会执行添加
In [110]: d
Out[110]: {1: 'default'}

In [111]: d.setdefault(2)

In [112]: d
Out[112]: {1: 'default', 2: None}

In [113]: d.setdefault(3,'v3')
Out[113]: 'v3'

In [114]: d
Out[114]: {1: 'default', 2: None, 3: 'v3'}
  • update(E=None,**F)
  • values(),a set-like object providing a view on D's values
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容