Python学习之旅--第二周--python基础
一.什么是pyc?
1.Python是解释性语言,那么.pyc是什么文件?
2.解释性语言和编译型语言区别:
计算机是不能够识别高级语言的,所以当我们运行一个高级别语言程序时,就需要一个“翻译机”来从事把高级语言转变成计算 机能读懂的机器语言,这个过程
分两类,第一种为编译,第二种是解释。编译语言在程序执行之前,会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直
接运行。最典型的就是C语言。
解释性语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行做出解释,然後直接运行,最典型的就是
ruby. 通过以上例子,我们可以总结一下解释型语言和编译语言的优缺点,因为编译型语言在运行之前就已经对程序作出了翻译,所以在 运行时就少掉了翻译的
过程,执行效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器优化来对程序做出翻译 时对整个程序做出优化,从而在效率上超过编译型语
言。 此外,随着JAVA等基于虚拟机的语言的兴起,我们又不能把语言纯粹的分成解释型和编译型这两种。 用JAVA来举例,JAVA首先是通过编译器编译成字节码
文件,然后在运行时通过解释器给解释成机器码,所以我们说JAVA是一种先编译再解释的语言。
3.PYTHON到底是什么?
其实PYTHON和JAVA/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单的了解一下PYTHON程序的运行过程吧 当我们在命令行中输入PYTHON HELLO.
PY时,其实是激活了PYTHON的解释器,告诉解释器:你要开始工作了,可是解释之前,其实执行了 第一项工作和JAVA一样,是编译。 只是我们再用ECLIPSE
之类的IDE时,将这两部给融合成了一部而已。其实PYTHON也一样,当我们执行PYTHON HELLO.PY时,他也一样执行 这么一个过程,所以我们应该这样描述PYT
HON,PYTHON是一门先编译后解释的语言。 4.简述PYTHON的运行过程: 在所这个问题之前,我们先来说两个概念。PYCodeObject和pyc文件。
我们再硬盘上看到的pyc自然不必多说,而其实PYCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了。
当PYTHON程序运行时,编译的结果则是保存在位于内存中的PYCodeObject中,当PYTHON程序运行介时,PYTHON解释器则将PYCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。 所以我们应该这样来定位PyCodeObject和
pyc文件,我们说pyc文件其实就是PyCodeObject的一种持久化保存方式。
二.数据类型
数据类型初识
1.数字
2是一个整数的例子。 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里52.3E-4表示52.3*10-4 (-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数。j为虚数,数学中表示复数是什么?
int整型
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647 在64位机器上,整数的位数为64位,取值范围为-2**63~-2**63-1,即-9223372036854775808~9223372036854775808
long长整型 跟C语言不同,PYTHON的长整型没有定位宽,即PYTHON没有限制长整数的数值大小,但实际由于机器内存有限,我们使用的长整型数值不可能无限大。 注意,自从PYTHON2.2起,如果整数发生溢出,PYTHON会自动将整数数据转换成长整型,所以如今在长整数据后面不加字母L也不会导致严重后果。
float浮点数
浮点数用来处理实数,即带有小数点的数字。类似与C语言中的DOUBLE类型。占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex复数
复数由实数和虚数部分组成,一般形式为x+yj,其中x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。 注:PYTHON中存在小数字池:-5~257
2.布尔值
真或假 1或0
3.字符串
“hello world” 万恶的字符串拼接: PYTHON中的字符串在C语言中体现的是一个字符数组,每次创建字符串时需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间, 万恶的+号每出现一次就会在内存中重新开辟一块空间。 字符串格式化输出
name = "alex"
print ("i am %s"%name)
输出:
i am alex
如果字符串内部既包含'
又包含"
怎么办?可以用转义字符\
来标识,比如我想打印:my name is "tim"
name = "tim"
print('my name is \"%s\"'%name)
转义字符\
可以转义很多字符,比如\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\.
如果字符串里面有很多字符都需要转义,就需要加很多\
,为了简化,Python还允许用r''
表示''
内部的字符串默认不转义,可以自己试试:
print(r'My name is "tim,",your name is "king"')
输出:
My name is "tim,",your name is "kim"
4.空值
空值在PYTHON中是一个特殊的值,用none表示。
5.变量
变量不仅可以是数字,也可以是字符串、布尔值等等任意数据类型。变量是内存中分配的一个存储数据的空间。变量名必须是大小写字母、数字和_组成,且不能由数字开头。
a = 1
b = "Hello World!"
c = True print(a)
print(b)
print(c)
输出:
1
Hello World!
True
变量a是数字1,变量b是字符串Hello World!,变量c是布尔值True
6.常量
常量是不可更改的数据,一旦初始化后,就不可改变值。一般用大写来表示:
NUMBER = 5
7.列表
python内置的一种数据类型,list是一种有序的集合,可是随时添加或删除其中的元素。
例如:
list= ['Tim','jack','king','jane']
用len(list)可以知道列表有多少个元素。比如:
>>> len(list)
4
索引从0开始,用索引访问列表中所有元素:
list[0]
>>>Tim
list[1]
>>>jack
list[2]
>>>king
list[3]
>>>jane
索引-1表示倒数第一个,-2表示倒数第二个,以此类推。
添加元素:
list.append('mike')
print(list)
>>>['Tim', 'jack', 'king', 'jane', 'mike']
通过append方法添加的元素一般放在索引最后,也可以插入指定位置的值,如:
list= ['Tim','jack','king','jane']
list.insert(1,'Tom')
print(list)
>>>['Tim', 'Tom', 'jack', 'king', 'jane']
删除末尾的元素:
list= ['Tim','jack','king','jane']
list.pop()
>>>['Tim', 'jack', 'king']
删除指定位置的元素:
list= ['Tim','jack','king','jane']
list.pop(2)
print(list)
>>>['Tim', 'jack', 'jane']
或者:
list.remove('king')
还可以有一种办法:
name = ['alex','jack','Rain','Eric','Monica','Fiona']
del name[4:6]
print(name)
>>>['alex', 'jack', 'Rain', 'Eric']
还可以用del删除整个列表:
name = ['alex','jack','Rain','Eric','Monica','Fiona']
del name
print(name)
>>>Traceback (most recent call last):
File "C:\workspace\day2\test.py", line 3, in <module>
print(name)
NameError: name 'name' is not defined
替换指定位置元素:
list= ['Tim','jack','king','jane']
list[0] = 32
print(list)
>>>[32, 'jack', 'king', 'jane']
元素也可以是另一个列表
list= ['Tim','jack',['king','Wang'],'jane']
print(list)
>>>['Tim', 'jack', ['king', 'Wang'], 'jane']
每隔一个取一个值:
name = ['alex','jack','Rain','Eric','Monica','Fiona']
print(name[0:])
print(name[0: :2])#或者print(name[::2])
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona']
['alex', 'Rain', 'Monica']
判断元素是否存在以及计算有几个同值元素:ele in name
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
if 9 in name:
print("9 is in name.")
num_of_ele = name.count(9)
print("[%s]9 is/are in name."%num_of_ele)
>>>
9 is in name.
[2]9 is/are in name.
寻找元素的索引值:name.index()
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
posistion_of_ele = name.index(9)
print(posistion_of_ele)
>>>
11
批量修改同样值得元素:name.index()
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
while True:
running = 9 in name
if running == True:
posistion_of_ele = name.index(9)
name[posistion_of_ele] = 999
else:
break
print(name)
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 999, 999, 2] 或者:(同样效果)
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
for i in range(name.count(9)):
ele_index = name.index(9)
name[ele_index] = 999
print(name)
列表扩展:extend()
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
name2 = ['zhangsan','lisi','zhaosha']
name.extend(name2)
print(name)
print(name2)
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2, 'zhangsan', 'lisi', 'zhaosha']
['zhangsan', 'lisi', 'zhaosha']
看下面这段代码,可以依次取到元素的某个字符。
name = ['MingLong','MingHu','Jack',22,9,23,3,4,5,7,87,89,9,9,4]
print(name[:6])
>>>['MingLong', 'MingHu', 'Jack', 22, 9, 23]
print(name[:6][2])
>>>Jack
print(name[:6][2][0])
>>>J
元素的排序:sort()
name = [56,8,23,76555,12,467,786,1231]
print(name)
name.sort()
print(name)
>>>
[56, 8, 23, 76555, 12, 467, 786, 1231]
[8, 12, 23, 56, 467, 786, 1231, 76555]
列表复制:
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
name3 = name.copy()
print(name)
print(name3)
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
列表嵌套:内嵌列表是单独的一块内存地址,在使用copy()时,其实并没有复制内嵌列表的值,只是把内嵌列表的内存地址指向了新列表,在内嵌列表被修改后,同时作用于所有拥有此内嵌列表的列表。而普通元素相当于变量赋值,按照赋值的顺序显现。等同于标准库的copy.copy(list),而要完全复制内嵌列表可以使用
import copy name = ['alex','jack','Rain',[5,6,87,2],'Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
name3 = name.copy() #不复制内嵌列表
name4 = copy.copy(name)#等同于copy()
name5 = copy.deepcopy(name) #完全复制内嵌列表
name[0] = 'Jeson'
name[3][1] = 4444444
name3[3][2] = "HHHHHH"
print("name",name)
print("name3",name3)
print("name4",name4)
print("name5",name5)
>>>
name ['Jeson', 'jack', 'Rain', [5, 4444444, 'HHHHHH', 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
name3 ['alex', 'jack', 'Rain', [5, 4444444, 'HHHHHH', 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
name4 ['alex', 'jack', 'Rain', [5, 4444444, 'HHHHHH', 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
name5 ['alex', 'jack', 'Rain', [5, 6, 87, 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
Python学习之旅--第二周--python基础的更多相关文章
- Python学习之旅--第二周--元组、字符串、运算、字典
一.元组 另一种有序列表叫元组:tuple.tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: # Author:Tim Gu tuple = (" ...
- Python 学习日记(第二周)
从这周开始我就正式学习Python 语言了.以后每周都会有一篇有关于学习Python的见闻与大家分享! Python的安装 学习的第一步首先要有一个运行的环境.所以接下来介绍一下安装的步骤. 通过Py ...
- 小猪的Python学习之旅 —— 16.再尝Python数据分析:采集拉勾网数据分析Android就业行情...
一句话概括本文: 爬取拉钩Android职位相关数据,利用numpy,pandas和matplotlib对招人公司 情况和招聘要求进行数据分析. 引言: 在写完上一篇<浅尝Python数据分析: ...
- Python学习之旅--第一周--初识Python
一:Python是一种什么样的语言? 1.语言的分类: a.编译型语言和解释性语言: 通常所说的计算机语言分为编译型和解释型语言.编译型语言典型的如C,C++,通常在程序执行之前必须经由编译器编译成机 ...
- Python学习之旅:用Python制作一个打字训练小工具
一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...
- Python学习之旅:使用Python实现Linux中的ls命令
一.写在前面 前几天在微信上看到这样一篇文章,链接为:https://mp.weixin.qq.com/s/rl6Sgv3uk_IpoFAx6cWa8w,在这篇文章中,有这样一段话,吸引了我的注意: ...
- 180分钟的python学习之旅
最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...
- Python学习系列(八)( 面向对象基础)
Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
随机推荐
- Servlet的Request.getInputStream()只能读取一次问题
Servlet的Request.getInputStream()只能读取一次问题 这个星期公司的项目接口进行改造,公司的接口有的采用了WebService的方式,有的使用的是Http协议+Servle ...
- Arduino 各种模块篇 震动模块 vibrator module
The vibrator I got works at the voltage ranging from 3.3V ~ 5.5V I want to make it vibrate variably. ...
- Citrix 服务器虚拟化之一 网络部署Xenserver 6.2
Citrix 服务器虚拟化之一 网络部署Xenserver 6.2 思杰的XenServer®是完整的服务器虚拟化平台. XenServer软件包中包含所有你需要创建和管理部署的虚拟x86计算机上运 ...
- 分享一个javascript alert精简框架
如果你不喜欢浏览器自带的alert你可以尝试总共不超过10KB somke js 下载地址:http://smoke-js.com/ 使用方法 somke.alert("hello wor ...
- [置顶] logistic回归(一)
先介绍下基础的公式: 这个是Sigmoid函数,在这个回归过程中非常重要的函数,主要的算法思想和这个密切相关.这个函数的性质大家可以自己下去分析,这里就不细说了. 然后我们说明下流程,首先我们将每个特 ...
- C语言实现修改文本文件中的特定行
最近由于项目需要实现修改文件的功能,所以,博主认真查阅了一些资料,但是,很遗憾,并没有太多的收获. 好的,首先我先叙述下功能要求: 其实很简单,就是Shell中sed命令的C语言实现,实现定 ...
- Power BI官方视频(4) Power BI Desktop 2017年首次更新先睹为快
在过去的2016年,Power BI Desktop在功能上进行了很多改进和更新,产品迭代速度非常快,基本是每个月一个版本.过去的一年,我们期待的Power BI中国区服务已经可以在世纪互联购买和使用 ...
- Linux中的task,process, thread 简介
本文的主要目的是介绍在Linux内核中,task,process, thread这3个名字之间的区别和联系.并且和WINDOWS中的相应观念进行比较.如果你已经很清楚了,那么就不用往下看了. LINU ...
- 怎么在Windows下安装Linux虚拟机
前提:①电脑有安装好VMware Workstation Pro虚拟机,没有的话点此下载并安装.②下载好CentOS-7-x86_64-DVD-1503-01镜像文件,没有点此下载密码:lomg. 1 ...
- TypeScript 中的 SOLID 原则
下面的文章解释了正确使用 TypeScrip的 SOLID原则. 原文地址:https://samueleresca.net/2016/08/solid-principles-using-typesc ...