语言类型

1.编译型语言
由编译型语言编写的源程序需要经过编译,汇编,连接才能输出目标代码,然后由机器执行目标代码。目标代码是指机器指令组成,不能独立运行,因为源程序中可能使用一些汇编程序不能解释引用的库函数,而库函数有不在源码程序中,因此还需要连接程序完成外部引用和目标模板调用的连接任务,最后才能进行执行代码。

2.解释型语言
解释器不产生目标机器代码,而是中间代码。中间代码的解释由软件支持,不能直接使用再硬件上。软件解释器通常会导致执行效率低。和编译程序语言不同,解释程序的任务就是逐一将源代码的语句解释成可执行的机器指令。需要专门的解释器运行解释程序,每条语句只有在被执行时才能被翻译,每执行一次就需要翻译一次,因此执行效率比较低下。而python就是一种解释型语言;

python运行原理

当我们运行python文件解释器的时候,python解释器将源码代码转化为字节码,然后由python解释器执行字节码。

python编译过程

1.python在执行源码时会进行词法分析,正确执行否则不会被执行;
2.在接下来进行语法分析,正确执行否则不会被执行;
3.python在执行时,编译结果被保存在位于内存中PyCodeobject中,当python程序结束时,python解释器则将PyCodeobject写入到pyc文件中。
当再次执行时,会从硬盘查找pyc文件,存在则直接执行,否则从新编译执行(pyc文件其实是PyCodeObject的一种持久化保存方式)

注意:Python中有一个内置函数compile(),可以将源文件编译成codeobject;

python文件的编码

在python2中默认的编码为ascii,python3中默认的编码为unicode;

设置python文件的编码格式

# -*- coding:utf-8 -*-

encode():把Unicode编码格式的字符串转换为其他编码格式的字符串;
decode(): 将其他编码的字符串换成Unicode编码的字符串;

python的标准输入与输出

input()内置函数从标准输入读取一行文本,默认的标准输入是键盘。

输出有两种方式:表达式语句和print()内置函数。
print()函数默认是以换行符‘\n’为分割符,可以使用end="分隔符"来执行分隔符

print('hello')
print('hello world',end='@')
print('hello python')
输出结果:
hello
hello world@hello python

#\n代表换行, \t代表一个tab键
print('\t\t\t标题\n\t\t1.标题1\n\t\t2.标题2')
print("""
        题目
    标题1
    标题2
""")
输出结果为:
            标题
        1.标题1
        2.标题2
        题目
    标题1
    标题2
#转译特殊字符
print('\"python\",this\'s a best language')
输出结果为:
"python",this's a best language

python的标准数据类型

python的标准数据类型含有六种分别为:数字,字符串,列表,元组,字典,集合;
判断数据的对象是否可变根据其id值来进行判断(使用内置函数id())
可变数据类型
可变数据类型的对象内容可变,即value值改变而id值不变;
包含数据类型:列表,字典,集合

缺点:
修改这个变量绑定的值,如果内存中没有存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定,而不是修改变量原来指定的内存块的值,执行效率带来一定的降低。

不可变数据类型
不可变数据类型的对象内容不可变,即value值改变导致id值也随之改变;
包含数据类型:数字,字符串,元组
注意:
python中为了减少开辟内存造成的时间开销,对于三位内的整型数字类型数据,在开辟一块内存空间后,后面的三位内的整型数据都放到这个内存空间中,所以三位以内的整型数字类型的id值都是相同的。

数据类型之数字

数字类型支持int,float,bool,complex(复数);
内置函数type()可以查询变量的对象类型;
而isinstance()函数用来判断变量对象是否是某种类型,输出值为bool值;

数字类型
整型:通常被称为是整型或整数,是正或负整数,不带小数点;
浮点型:浮点型由整数部分与小数部分组成;
复数:由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型;

数字类型的转换

int()将其他类型转化为整型;
float()将其他类型转化为浮点型;
complex()将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x,y)将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。

数字类型运算
加法(+),减法(-),乘法(*),除法(/ 返回有一个浮点数和 // 返回一个整数),取余(%),乘方(***)

注意:
python可以同时为多个变量进行赋值;
.real访问复数的实部,.imag访问复数复数的虚部;

数据类型之字符串

用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。由0个或者多个字符组成的有序序列字符组合;

创建字符串

S = 'hello world'
print("字符串的内容:%s和格式为:%s"%(S,type(S)))
输出结果:
字符串的内容:hello world和格式为:

一.字符串的特性

索引
python字符串是不可以改变的序列,所有的序列都可以通过索引来获取其中的数据元素,索引从 0 开始;
S[I]:获取特定偏移的元素;

#正向索引
print(S[0])
print(S[4])
输出结果:
h
o
#反向索引
print(S[-1])
print(S[-3])
输出结果:
d
r

切片
S[i:j]:提取字符串特定字符作为一个序列
如果没有给出切片的边界,切片的下边界默认为0,上边界为字符串长度;

print(S[1:4]) #从索引1开始到3结束;
print(S[:6])  #如果没有开始值,则默认从0索引开始;
print(S[2:])  #如果没有结束值,则默认到最后结束;
print(S[:])   #如果默认没有0索引开始到字符长度-1结束;
print(S[-3:])  #显示最后3个字符;
输出结果:
ell
hello 
llo world
hello world
rld

拓展切片
S[i:j:k]其中k为递增的步长;

print(S[0:8:2]) #从0开始到7结束,步长为2;
print(S[::-1])  #反转字符串;
输出结果:
hlow
dlrow olleh

字符串的连接
+:用于连接两个字符串;
使用+号连接2个字符串会调用静态函数stringconcat(register PyStringObject a ,register PyObject b), 会在这个函数开辟一块大小是a+b的内存存储单元,然后将a,b字符串拷贝进去。如果是n个字符串相连,会开辟n-1次内存,是非常消耗资源。

S1 = "hello python"
print(S+S1)
输出结果:
hello worldhello python

str.join():连接2个字符串

S1 = "###"
print(S.join(S1))
输出结果:
#hello world#hello world#

重复
S*N:表示重复S(字符)N次;

print('*'*5+S+'#'*5)   #*号重复5次,#重复5次
输出结果:
*****hello world#####

字符串的成员操作符

print('he' in S)   #判断he字符串存在S中,存在返回true,否则返回false
print('he' not in S)  #判断he字符串不存在S中,存在返回true,否则返回false
print('jj' in S)
print('jj' not in S)
输出结果:
True
False
False
True

for循环:依次遍历字符串每个元素

for i in S:
    print(i,end='-')
输出结果:
h-e-l-l-o- -w-o-r-l-d-

二.字符串的常用方法

统计字符在字符串出现的次数
str.count(sub, start= 0,end=len(string))
返回字符串里某个字符或是子字符串出现的次数。可选参数为在字符串搜索的开始(默认为第一个字符)与结束(默认为最后一个字符)位置。

print(S.count('l'))     #判断字符l在字符串出现的次数
print(S.count('l',2,9)) #判断字符l在索引0到索引9之前出现的次数
输出结果:
3
2

查找字符串
str.index()和str.find 功能相同,区别在于find()查找失败会返回-1,不会影响程序运行。一般用find != -1 或者find > -1 来作为判断条件。
str.find('python', 1, len(str)) #find()查找的是子字符串在全字符串中出现的第一个位置,匹配到字符串就结束查找,不管后面还有没有匹配的字符串;
str.rfind('string', 1, len(str)) #从最右边开始查找,但返回的位置确实从原字符串最左边开始计算的;
str.index('Python', 0, len(str))
str.rindex('string', 0, len(str))

print(S.index('l'))  #查找指定字符在字符串中第一次出现的索引值
print(S.rindex('l'))
print(S.find('d'))
print(S.rfind('d'))
print(S.find('jj'))
输出结果:
2
9
10
10
-1

字符串的修改和删除
str.replace(old, new[, count])
返回一个新的字符串,原字符串的旧字符串被新的替换,count指定替换的次数;

print(S.replace('hello','world'))
S2 = 'hello world hello world'
print(S2.replace('hello','world',2))
输出结果:
world world
world world world world

该方法可以删除字符串的中间空格,或者删除某个字符

print(S)
print(S.replace(' ',''))
print(S.replace('l',''))
对比输出结果:
hello world
helloworld
heo word

去除空格以及特殊符号
str.strip() 去除字符串开头和结尾的空格
str.lstrip() 去除字符串开头的空格
str.rstrip() 去除字符串结尾的空格

S3 = ' hello python'
S4 = 'hello python '
print(S3)
print(S3.lstrip())
print(S4.rstrip())
输出结果:
 hello python
hello python
hello python

字符串长度

print(len(S))
输出结果:
11

字符串中字母大小写转换

S5 = 'HELLO world'
print(S5.upper())  #将字符串中的小写字母转化为大写字母输出
print(S5.lower())  #将字符串中的大写字母转化为小写字母输出
输出结果:
HELLO WORLD
hello world

判断字符串

print(S)
print(S.isalnum()) # 判断所有字符都是数字或者字母
print(S.isalpha()) # 判断所有字符都是字母
print(S.isdigit()) # 判断所有字符都是数字
print(S.islower()) # 判断所有字符都是小写
print(S.isupper()) # 判断所有字符都是大写
print(S.istitle()) # 判断所有单词都是首字母大写,像标题
print(S.isspace()) # 判断所有字符都是空白字符、\t、\n、\
print(S.istitle()) # 判断是否为标题{第一个字母为大写,其他字母为小写}
输出结果:
hello world
False
False
False
True
False
False
False
False

字符串的对齐

print(S)
print(S.center(20))      #字符长度为20,设置该字符串居中对齐
print(S.center(20,'#'))  #字符长度为20,设置该字符串居中对齐,空格部分使用#填充
print(S.ljust(20,'#'))   #字符长度为20,设置该字符串居左对齐,空格部分使用#填充
print(S.rjust(20,'#'))   #字符长度为20,设置该字符串居右对齐,空格部分使用#填充
输出结果:
hello world
    hello world     
####hello world#####
hello world#########
#########hello world

判断字符串以什么开头和结尾

print(S)
print(S.startswith('he')) #判断字符串S是否已字符he开头,如果为真返回true,否则返回false;
print(S.startswith('ho'))
print(S.endswith('ld'))  #判断字符串S是否已字符ld结尾,如果为真返回true,否则返回false;
print(S.endswith('jd'))
输出结果:
hello world
True
False
True
False

求取字符串的最大值和最小值
字符串取最大值和最小值是按照ASSIC码进行比较大小;

print(S)
print(max(S))
print(min(S))
#将字符串的每个字符的ASSIC码求出来
for i in S:
    print('%s=%s'%(i,ord(i)))
输出结果:
w
     #最小值为空格
h=104
e=101
l=108
l=108
o=111
 =32
w=119
o=111
r=114
l=108
d=100

枚举

for j in enumerate(S):
    print(j)
输出结果:
(0, 'h')
(1, 'e')
(2, 'l')
(3, 'l')
(4, 'o')
(5, ' ')
(6, 'w')
(7, 'o')
(8, 'r')
(9, 'l')
(10, 'd')