当前位置: 首页 > news >正文

Python入门篇(二)

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
|二进制或复制操作了一个比特,如果它存在一个操作数中。(ab) = 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,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。这是件好事。不管怎样,字符串和字节包之间的界线是必然的,下面的图解非常重要,务请牢记于心:

Python入门篇(二)

#!/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类型

转载于:https://blog.51cto.com/jinlong/2083136

相关文章:

  • 我为什么突然想转管理?
  • Eclipse Open J9:Eclipse OMR项目提供的开源JVM
  • MySQL优化Explain命令简介(一)
  • HDOJ 4455 Substrings 递推+树状数组
  • 雨果奖得主刘慈欣(《三体》作者)如何看待人工智能?
  • 《Raw Data》正式登录Oculus,跨平台对战已成VR游戏主要发展方向
  • Nginx的配置使用
  • spark2.1:flatMap的用法
  • java容器类1:Collection,List,ArrayList,LinkedList深入解读
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Hibernate【inverse和cascade属性】知识要点
  • IE安全系列之——昨日黄花:IE中的ActiveX(I)
  • 管道符和作业控制,shell变量和环境变量配置文件
  • Hadoop发行版某厂商发布TPC-DS评测结果
  • node.js中npm安装的模块在哪个目录下
  • CentOS 7 防火墙操作
  • Computed property XXX was assigned to but it has no setter
  • Druid 在有赞的实践
  • IndexedDB
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Laravel Telescope:优雅的应用调试工具
  • leetcode386. Lexicographical Numbers
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux各目录及每个目录的详细介绍
  • maven工程打包jar以及java jar命令的classpath使用
  • passportjs 源码分析
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • 动态规划入门(以爬楼梯为例)
  • 听说你叫Java(二)–Servlet请求
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  •  一套莫尔斯电报听写、翻译系统
  • 再次简单明了总结flex布局,一看就懂...
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Android开发者必备:推荐一款助力开发的开源APP
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 回归生活:清理微信公众号
  • ​如何防止网络攻击?
  • #《AI中文版》V3 第 1 章 概述
  • #宝哥教你#查看jquery绑定的事件函数
  • #前后端分离# 头条发布系统
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (AngularJS)Angular 控制器之间通信初探
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (pojstep1.1.2)2654(直叙式模拟)
  • (八)Flask之app.route装饰器函数的参数
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (万字长文)Spring的核心知识尽揽其中
  • (转)socket Aio demo
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • . Flume面试题
  • .apk 成为历史!