设为首页 收藏本站
查看: 1198|回复: 0

[经验分享] Python入门篇(二)

[复制链接]

尚未签到

发表于 2018-8-4 10:49:04 | 显示全部楼层 |阅读模式
Python基础

1、Python模块
  

### sys模块  
#!/usr/bin/python
  
# _*_ coding:utf-8 _*_
  
# Aothr: Kim
  
import sys #导入sys模块
  
print (sys.path) #打印python环境变量
  
print(sys.argv) #打印脚本相对路径,执行的时候可以传入参数
  
print (sys.argv[2]) #取出传入的参数
  

###os模块  
import os
  
print(os.system("dir")) #调用系统命令
  
cmd_res = os.popen("dir").read() #使用cmd_res变量存储执行结果,这里命令的执行结果会指向一个内存地址,所以需要加.read去读取结果。
  
print("-->",cmd_res)
  
os.mkdir("new_dir") #os模块中的创建目录方法
  

  第三方库,默认找当前目录,然后找Python环境变量是否存在该模块名。


2、Python PYC

  预编译后的字节码


(1)Python是一门解释型语言?
  初学Python一直听别人说,Python是一门解释性语言,直到发现了.pyc文件的存在。如果是解释型语言,那么生成的.pyc文件是什么呢?c应该是compiled的缩写才对啊!
  为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

(2)解释型语言和编译型语言
  计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
  编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
  解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。
  通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
  此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
  用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

(3)Python到底是什么
  Python也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
  当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
  Python是一门先编译后解释的语言。

(4)简述Python的运行过程
  在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
  我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
  当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
  当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到则直接载入,否则就重复上面的过程。
  所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

3、Python数据类型

3.1、int(整数)
  

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647  
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
  

3.2、long(长整数)
  

    自从python2.2起,如果整数发生溢出,python会自动将整数数据转为长整数类型,但是在python3.x版本,不存在long数据类型  

  
========python 2.7.5===========
  
[root@python ~]# python
  
Python 2.7.5 (default, Aug  4 2017, 00:39:18)
  
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
  
Type "help", "copyright", "credits" or "license" for more information.
  
>>> type(2**50)
  
<type 'int'>
  
>>> type(2**60)
  
<type 'int'>
  
>>> type(2**62)
  
<type 'int'>
  
>>> type(2**63)
  
<type 'long'>
  
>>>
  

  
========python 3.5.2===========
  
(venv) D:\Python18\day02>python
  
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
  
Type "help", "copyright", "credits" or "license" for more information.
  
>>> type(2**100)
  
<class 'int'>
  

3.3、float(浮点数)
  

1.浮点数用来处理实数,即带有小数的数字。  
2.浮点表示的形式是小数,但小数不一定都是浮点型,23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
  

3.4、complex(复数)
  

复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。  
注:Python中存在小数字池:-5 ~ 257
  

3.5、布尔值
  

真或假、1或0  
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
  
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
  
Type "help", "copyright", "credits" or "license" for more information.
  
>>> a = 0
  
>>> if a :print("a")
  
...
  
>>> a =1
  
>>> if a :print("a")
  
...
  
a
  

3.6、查看数据类型的方法
  

查看数据类型,使用type(),如下:  

  
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
  
Type "help", "copyright", "credits" or "license" for more information.
  
>>> print(type("www.123.com"))
  
<class 'str'> #字符串
  
>>> print(type(1.22))
  
<class 'float'> #浮点数
  
>>> print(type(1))
  
<class 'int'> #整型
  

4、数据运算

4.1算术运算

操作符
描述符
示例
+
加法- 对操作符的两侧增加值
a + b = 30
-
减法 - 减去从左侧操作数右侧操作数
a - b = -10
*
乘法 - 相乘的运算符两侧的值
a * b = 200
/
除 - 由右侧操作数除以左侧操作数
b / a = 2
%
模 - 由右侧操作数和余返回除以左侧操作数
b % a = 0
**
指数- 执行对操作指数(幂)的计算
a**b = 10 的幂 20
//
取整除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。
9//2 = 4 而 9.0//2.0 = 4.0
4.2比较运算

操作符
描述符
示例
==
检查,两个操作数的值是否相等,如果是则条件变为真。
(a == b) 不为 true.
!=
检查两个操作数的值是否相等,如果值不相等,则条件变为真。
(a != b) 为 true.
<>
检查两个操作数的值是否相等,如果值不相等,则条件变为真。
(a <> b) 为 true。这个类似于 != 运算符
>
检查左操作数的值是否大于右操作数的值,如果是,则条件成立。
(a > b) 不为 true.
<
检查左操作数的值是否小于右操作数的值,如果是,则条件成立。
(a < b) 为 true.
>=
检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。
(a >= b) 不为 true.
<=
检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。
(a <= b) 为 true.
4.3赋值运算

操作符
描述符
示例
=
简单的赋值运算符,赋值从右侧操作数左侧操作数
c = a + b将指定的值 a + b 到 c
+=
加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数
c += a 相当于 c = c + a
-=
减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数
c -= a 相当于 c = c - a
*=
乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数
c = a 相当于 c = c a
/=
除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数
c /= a 相当于= c / a
%=
模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数
c %= a is equivalent to c = c % a
**=
指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数
c = a 相当于 c = c a
//=
地板除,并分配一个值,执行地板除对操作和赋值给左操作数
c //= a 相当于 c = c // a
4.4位运算

操作符
描述符
示例
&
二进制和复制操作了一下,结果,如果它存在于两个操作数。
(a & b) = 12 即 0000 1100
|
二进制或复制操作了一个比特,如果它存在一个操作数中。
(a
b) = 61 即 0011 1101
^
二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。
(a ^ b) = 49 即 0011 0001
~
二进制的补运算符是一元的,并有“翻转”位的效果。
(~a ) = -61 即 1100 0011以2的补码形式由于带符号二进制数。
<<
二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。
a << 2 = 240 即 1111 0000
>>
二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。
a >> 2 = 15 即 0000 1111
4.5逻辑运算

操作符
描述符
示例
and
所谓逻辑与运算符。如果两个操作数都是真的,那么则条件成立。
(a and b) 为 true.
or
所谓逻辑OR运算符。如果有两个操作数都是非零然后再条件变为真。
(a or b) 为 true.
not
所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。
not(a and b) 为 false.
4.6二、三元运算
  

result = 值1 if条件 else 值2  

  
如果条件为真:result=值1
  
如果条件为假:result=值2
  

  
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
  
Type "help", "copyright", "credits" or "license" for more information.
  
>>> a,b,c = 1,3,5
  
>>> d = a if a>b else c
  
>>> d
  
5
  
>>> d = a if a <b else c
  
>>> d
  
1
  

4.7进制类型

  二进制,01
  八进制,01234567
  十进制,0123456789
  十六进制,0123456789ABCDEF


5、bytes类型

  Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。这是件好事。不管怎样,字符串和字节包之间的界线是必然的,下面的图解非常重要,务请牢记于心:

DSC0000.jpg

  

#!/usr/bin/python  
# _*_ coding:utf-8 _*_
  
# Aothr: Kim
  

  
#string和bytes类型转换,使用encode和decode的方式
  
#decode==>bytes-->string
  
#encode==>string-->bytes
  
#举例
  
msg = "我爱北京天安门"
  

  
print(msg)
  
print(msg.encode(encoding="utf-8") #转换成bytes
  
print(msg.encode(encoding="utf-8").decode(encoding="utf-8")) #转换成字符串
  

  
执行结果如下:
  
我爱北京天安门
  
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
  
我爱北京天安门
  

  
应用场景:socket中传输必须是二进制,此时就需要将string进行转换成bytes类型

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546367-1-1.html 上篇帖子: python变量及浅复制与深复制 下篇帖子: python Pycurl 库 —— 实现对网站抓包分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表