Python基础语法篇(1)

简介

Python是吉多·范罗苏姆在1989年的圣诞节创立的。经过二十多年的完善,已经成为了一个优秀并广泛使用的语言。

Python可以应用于数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。

诸如Youtube、Dropbox、Quora、豆瓣、知乎、Google、Yahoo!、Facebook、百度、腾讯等公司都有使用Python。

编译型&解释型

Python是解释型语言,程序不需要编译,在运行程序的时候才翻译成机器语言,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。

编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。典型的有C、C++。

编译型语言就相当于做好一桌子菜再开吃,而编译型语言就相当于吃火锅…

我们还能从Python项目里看到__pycache__文件夹和里面的.pyc文件。在文档里是这么说的:

To speed up loading modules, Python caches the compiled version of each module in the pycache directory under the name module.version.pyc, where the version encodes the format of the compiled file; it generally contains the Python version number.

也就是说import别的.py文件时,那个.py文件会被存一份.pyc提升下次加载的速度。注意并不是运行的速度。 例如:

新建文件a.py

1
2
3
4
5
6
class Greet():
def __init__(self, name):
self.name = name

def greet(self):
print("Hello, " + self.name + "!")

新建文件b.py

1
2
3
4
from a import Greet

A = Greet("Jack")
A.greet()

这时候,命令行运行>python b.py,当前目录下就会生成一个__pycache__目录,里面有文件a.cpython-36.pyc

静态语言&动态语言

Python是一门动态语言,动态类型语言是在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,不用给变量指定数据类型。此外,Ruby、JavaScript也是动态语言。

静态语言则是在编译期间做类型判断,如C、C++等。

强类型定义语言&弱类型定义语言

强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

Python是动态语言,也是强类型定义语言(类型安全的语言);VBScript是动态语言,是弱类型定义语言(类型不安全的语言);JAVA是静态语言,是强类型定义语言(类型安全的语言)。

Python2.x&Python3.x

官方有一句话:

In summary : Python 2.x is legacy, Python 3.x is the present and future of the language

2和3详细的区别这里就不说了,最大的改动就是Python3.x里所有文本字符串默认为Unicode编码,意味着可以直接写中文,开头不需要# -*- coding:utf-8 -*-了。

Hello World!

Windows下在官网下载安装程序直接安装,安装时勾上Add Python 3.6 to PATH

安装好后在命令行输入python输入:

1
2
>>> print('hello, world')
hello, world

Linux下想类似于执行shell脚本一样执行python脚本,例:./hello.py要在第一行加上指定解释器,env指里寻找python环境变量:

1
#!/usr/bin/env python

记得执行前需给予hello.py执行权限,chmod 755 hello.py

变量

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字
  • 以下关键字不能声明为变量名:
    ['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']
1
2
3
4
5
6
7
name = "Jack"
name2 = name # name2不是指向name而是指向name的值"Jack"
print("My name is ", name) # My name is Jack
print(name, name2) # Jack Jack

name = "Tom" # 只有name变了,name2不会变
print(name, name2) # Tom Jack

字符编码

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。

1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536

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

用户输入

1
2
3
# name = raw_input("What is your name?") # python 2.x
name = input("What is your name?")
print("Hello " + name )
  • python2中用raw_input(),它接收输入转换成string返回,输入数字也会当成string
  • python2中input()原理上是raw_input()调用eval()函数,输入字符串要用引号引起
  • python3中raw_input()和input()进行了整合,仅保留了input()函数,其接收任意输入并返回字符串类型。
  • eval():把字符串当成有效的python表达式求值并计算结果
  • repr():把变量和表达式转换成字符串表示