Python基础(一)

Python是一门解释型语言。

解释器类型:

cpython
pypy
ipython

Python声明解释得方法:

./yourpy.py #必须在文件头声明解释器(#!/usr/bin/env python)
python yourpy.py #不需要声明解释器

编译型语言和解释型语言优缺点:

编译型

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操纵系统之间移植就会有问题,需要根据运行的操纵系统环境编译不同的可执行文件。

解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

注:

JAVA既是编译型语言也是解释型语言,so 是混合型语言。

JavaScript 和 JAVA 的关系,就像雷锋和雷峰塔得区别。JavaScript是做前端使用,JAVA是做后端得。

变量定义的规则:

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字
  • 以下关键字不能声明为变量名  ['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']

变量是什么,变量是一种容器。变量名起到标记数据得作用。 

变量命名法:

两种命名法
trafficCost = windows 程序开发人员喜欢用 #驼峰命名法 traffic_cost = python官方推荐

AGE_OF_OLDBOY = 18 #全是大写字母写得变量,叫做常量,是不变的量。

补充:

单词之间不以空格、连接号或者底线连结(例如不应写成:camel case、camel-case或camel_case形式)。共有两种格式:
1、小驼峰式命名法(lower camel case):
第一个单字以小写字母开始,第二个单字的首字母大写。例如:firstName、lastName。
2、大驼峰式命名法(upper camel case):
每一个单字的首字母都采用大写字母,例如:FirstName、LastName、CamelCase,也被称为 Pascal 命名法。
变种:StudlyCaps,是“驼峰式大小写”的变种。
补充说明,在JAVA中:类名的标识符一般用大驼峰式书写格式,方法和变量的标识符则多用小驼峰式书写格式。

缩进:

必须顶行
同一级代码缩进必须一致
官方建议缩四个空格

注释:

当行注视:# 被注释内容,是真注释。
多行注释:""" 被注释内容 """,这不是真注释,只是把内容变成了字符串,是可以打印出来得。

补充:单引号和双引号,没有任何区别,只适用于单行。
      三个单引号和三个双引号,适应于多行。

字符编码:

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

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

关于中文

为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

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个字节保存,东亚的字符用3个字节保存...

所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

报错:ascii码无法表示中文

#!/usr/bin/env python
  
print "你好,世界"

改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
print "你好,世界"
512      256      128      64      32      16     8     4   2    1
1        1         1        1       1        1       1     1   1    1
二进制位=bit = 8bits
8bits = 1Byte = 1字节
1024Bytes = 1KB = 1KB
1024KB = 1MB = 100万字节 = 100万字符 = 1兆
1024MB = 1GB = 一部高清电影短片, 1080p 20分钟,
1024GB= 1TB
1024TB = 1PB

1个二进制位是计算机里的最小表示单元
1个字节是计算机里最小的存储单位

ASCII 256 ,每一个字符占8位

GB2312 1980 67xx
GBK1.0 1995  21000 2个字节
GB18030 2000 27000

unicode 万国码
    utf-32  = 4字节
    utf-16  = 2字节
    utf-8 = 8bits 可变长编码
    英文一个字节, 所有的中文3个字节
    欧洲 2个字节

如果内存里都是Unicode的话,还会有乱码的问题吗?

不会

注意:Python3里默认得是Unicode。

英文八进制的简写oct()
英文十六进制的简写hex()

习题:
怎么用16进制表示186

128 64 32 16 8 4  2  1
1   0  1  1  1 0  1 0
B A

python3
所有字符在内存里都是unicode
解释器读取文件的默认编码是utf-8
但是有个文件,编码是gbk,读到内存里,还是需要解码

数据类型初识:

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
3、字符串
    "hello world"

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

字符串格式化输出2.7:
name = "alex"
print "i am %s " % name

#输出: i am alex

字符串格式化输出3.6:
name = "alex"
print("i am %s " % name)

#输出: i am alex

PS: 字符串是 %s;整数 %d;浮点数%f

字符串常用功能:
移除空白
分割
长度
索引
切片


4、列表
创建列表:
name_list = ['alex', 'seven', 'eric']

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

基本操作:

索引
切片
追加
删除
长度
切片
循环
包含

列表的复制:

account = {
    'name':'alex',
    'id':1234,
    'info':[200,10]
}
account2 = account.copy()
account2['name'] = "骗子"
account["info"][1] += 30
print(account,account2)

注:查看内存地址变化

数据运算:

布尔运算:

bool运算,以下情况都为False:
[] 空列表
{} 空字典
() 空元组,空集合
''空字符
0

三元运算:

三元运算是if-else 语句的快捷操作,也被称为条件运算。可以让代码更加紧凑,更加美观。

[on_true] if [expression] else [on_false]
x, y = 50, 25
small = x if x < y else y

字符串常用方法:

strip()
center()
count()
find()
lower 或者 casefold
upper
join
split
endswith
startswith
replace
index

元组:

跟列表一样,
但是它是只读列表。
dir()把传入的数据类型的,所有方法以列表的形式返回。


names = ("lulu1","lulu2")
>>> names
('aa', 'bb')
>>> names[1] = "cc"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
类型错误	元组:	对象		不支持		元素	指定

元组的作用?

明确的表示,元组里存储的数据是不能被修改的
list(tuple元组)变成列表
tuple(list列表)变成元组

cmd查看帮助方法:
names=("aa","bb")
(1)help(names)
(2)dir(names) #下划线的不会用。

集合:set

关系测试
	交集	两个都有
	差集	在列表a里有,b里没有
	并集	把两个列表里的元素,合并在一起,去重
去重,天然去重
集合也是无序的

数据类型:

str # 它只是人类可读的抽象的表示形式
int
float
bool
list
tuple
dict
set
bytes 字节类型(二进制类型),就是一个8bits字节
	所有的字符要存在内存里,硬盘里,都是bytes格式
在py2里,你看到的字符串,就是bytes   str==bytes
str == bytes
unicode

在py3里
	str == unicode
	bytes == bytes

  

原文地址:https://www.cnblogs.com/luchuangao/p/6625619.html