Week01

变量定义的规则:

1、变量名只能是字母,数字或下划线的任意组合

2、变量名的第一个字符不能是数字

3、以下关键字不能声明为变量名:

and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield

4、PIE = "3.1415926"   #一般用大写表示常量

字符编码

Python解释器在加载.py文件中的代码时,会对内容进行编码(默认ascll)

ASCLL(American Standard Code for Information Interchange,美国标准信息交换代码),基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西殴语言,其最多只能用8位为表示(一个字节),即:2**8=256-1,所以,ASCLL码最多只能表示255个符号。

关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5.
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。
GB2312支持的汉字太少,1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。
汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准,该标准收录了27484个汉字,同时还收录了藏文,蒙文,维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机,MP3一般只支持GB2312.

从ASCII,GB2312,GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312,GBK到GB18030都属于双字节字符集(DBCS)

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode (统一码,万国码,单一码)是一种在计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定现有的字符和符号最少由16位来表示(2个字节),即:2**16=65536
注:此处所说的是最少2个字节,可能更多

UTF-8,是对Unicode编码的压缩和优化,它不再使用最少使用2个字节,而是将所有的字符和符号进行分类:
ASCII码中的内容用1个字节保存,欧洲的字符用2个字节保存,if 东亚的字符用3个字节保存..:

ASCII 255 1byte
--> 1980 GB2312 7445
--> 1995 GBK1.0 21886
--> 2000 GB18030 27484

--> unicode 2bytes
--> utf-8 英文:1byte, 中文:3bytes

注释

单行注释:#被注释内容

多行注释:‘’‘被注释内容’‘’ 或 “”“被注释内容”“”

多行打印

name = input("name:")
age = int(input("age:"))
job = input("job:")
salary = input("salary:")

info = '''
------info of %s------
Name:%s
Age:%s
Job:%s
Salary:%s
''' % (name,name,age,job,salary)

print (info)
View Code

 getpass模块

import getpass

username = input("usename:")
password = getpass.getpass("password")    #getpass进行了加密

print (username,password)
View Code

 猜数字(一)

age = 35

count = 0

while count < 3:
guess_age = int(input("guess age:"))
if guess_age == age:
print("yes, you got it.")
break
elif guess_age > age:
print("think smaller...")
else:
print("think bigger...")
count += 1
else:             #此处else表示不满足上面while循环条件才会执行.
print("You have tried too many times.")
View Code

 猜数字(二)

age = 35

for i in range(3):
guess_age = int(input("guess age:"))
if guess_age == age:
print("yes, you got it.")
break
elif guess_age > age:
print("think smaller...")
else:
print("think bigger...")
else:            #此处else表示上面for循环正常走完了才会执行.
print("You have tried too many times.")
View Code

continue

continue表示跳出本次循环,进入下一次循环

break

break表示结束当前整个循环

sys模块

#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
# Author:Jonas Mao

import sys

print(sys.path)             #打印环境变量
print(sys.argv)
print(sys.argv[2])
View Code

os模块

import os

cmd_res = os.system("ls -l")       #执行命令,不保存结果

#cmd_res = os.popen("ls -l")      #显示内存地址
cmd_res = os.popen("ls -l").read()        #执行命令,保存结果
print(cmd_res)

os.mkdir("new_dir")
View Code

导入不在同一目录下的模块方法

1、将模块放在site-packages目录下;
2、加一个包含模块的系统环境变量路径。 

.pyc是个什么鬼?

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

2. 解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

3. Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,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~9223372036854775807

long(长整型)
  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

float(浮点型)
先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html 
  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

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

2、布尔值

  真或假
  1 或 0

>>> a = 0
>>> if a:print('a')
...
>>>
>>> a = 1
>>> if a:print('a')
...
View Code

3、字符串

"hello world"

python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出

name = "alex"
print "i am %s " % name

4、列表

创建列表:

name_list = ['alex', 'seven', 'eric']

name_list = list(['alex', 'seven', 'eric'])

5、元组(不可变列表)

创建元组:

ages = (11, 22, 33, 44, 55)

ages = tuple((11, 22, 33, 44, 55))

6、字典(无序)

创建字典:

person = {"name": "mr.wu", 'age': 18}

person = dict({"name": "mr.wu", 'age': 18})

入门知识

1)bytes类型

encode
string -----> bytes
<-----
decode

2)三元运算

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

>>>
>>> a,b,c = 1,3,5
>>> d = a if a > b else c
>>>
>>> d
5
>>> d = a if a < b else c
>>>
>>> d
1
>>>
View Code

3)进制类别

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

计算机内存地址和为什么用十六进制?

1. 计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示)

2. 最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便。

3. 计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候十六进制也显得更好。

4. 为了统一规范,CPU、内存、硬盘我们看到都是采用的十六进制计算。

 十六进制用在哪里?

1. 网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。通过网络抓包,可以看到数据是通过16进制传输的。

2. 数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式。

3. 一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。 

posted @ 2017-12-27 00:05  Jonas.Mao  阅读(184)  评论(0)    收藏  举报