001 基础(环境准备、变量、注释、模块)
本节类容:
1、Python介绍
2、下载与安装(IDLE)
3、第一个小程序Hello World
4、各种语言版本的Hello World
5、变量\字符编码
6、注释
7、用户输入
8、模块
9、打包exe
10、练习
一、Python介绍
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
Python属于解释型语言,通常用IDLE(Integrated DeveLopment,集成开发环境)作为Python的编辑器。
根据《tiobe编程语言排行榜》,Python排行仅次于java、C、C++,排行第四。
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用
Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。
Python有多种解释器:
- CPython:这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
- IPython:IPython是基于CPython之上的一个交互式解释器,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
- PyPy:PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
- Jython:Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
- IronPython:IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
目前Python主要应用领域:
- 云计算: 云计算最火的语言, 典型应用OpenStack
- WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系统运维: 运维人员必备语言
- 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI: PyQT, WxPython,TkInter
二、下载与安装(IDLE)
linux、Mac:无需安装,原装Python环境
windows:
下载安装包(python-3.6.4 -x86.exe):https:www.python.org/downloads
安装:默认安装路径:C:\python27,安装过程参考:https://blog.csdn.net/qq_29883591/article/details/52664478
配置环境变量:环境变量PATH配置Python的安装目录,例如C:\python27
安装开发工具:pycharm-community-2018.1.1.exe,下载地址:http://www.jetbrains.com/pycharm/download/#section=windows
三、第一个小程序Hello World
在linux 下创建一个文件叫hello.py,并输入:
print("Hello World!")
然后执行命令:python hello.py ,输出
localhost:~ jieli$ vim hello.py localhost:~ jieli$ python hello.py Hello World!
指定解释器
上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:
#!/usr/bin/env python print "hello,world"
如此一来,执行: ./hello.py 即可。
ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py
在交互器中执行
除了把程序写在文件里,还可以直接调用python自带的交互器运行代码:
localhost:~ jieli$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World!")
Hello World!
四、各种语言版本的Hello World
#include <iostream> int main(void) { std::cout<<"Hello world"; }
#include <stdio.h> int main(void) { printf("\nhello world!"); return 0; }
public class HelloWorld{ // 程序的入口 public static void main(String args[]){ // 向控制台输出信息 System.out.println("Hello World!"); } }
<?php echo "hello world!"; ?>
puts "Hello world."
package main import "fmt" func main(){ fmt.Printf("Hello World!\n God Bless You!"); }
五、变量\字符编码
声明变量
#_*_coding:utf-8_*_ name = "Dream"
变量定义的规则:
变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
以下关键字不能声明为变量名:['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']
变量的赋值
name = "Dream" name2 = name print(name,name2) name = "Jack" print("What is the value of name2 now?")
字符编码
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 ("你好,世界")
六、注释
单行注释:# 被注释内容
多行注释:""" 被注释内容 """
七、用户输入
input是Python的输入方法,使用如下:
usr=input("Input Your Name:") #普通输入 print("user is %s"%(usr))
getpass模块使用时要先导入包,且在PyCharm中不可用,可以在命令行或linux上运行调试。
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,而getpass模块下的getuser方法是获取当前登录主机的用户名(非用户自定义输入)
代码逻辑中涉及中文是,要做编码声明
# -*- coding: utf-8 -*-
下面是一个示例:
#!/usr/bin/env python # -*- coding: utf-8 -*- import getpass def check_user(user,pwd): if user=="Dream" and pwd=="1234": print("UserName is %s;Password is %s"%(user,pwd)) return True else: return False if __name__=="__main__": # usr=getpass.getuser() #获取登录主机的用户名 usr=input("Input Your Name:") #普通输入 print("user is %s"%(usr)) pwd=getpass.getpass("Input Your Pwd:") if check_user(usr,pwd): print("OK") else: print("ERROR")
八、模块
sys
# !/usr/bin/env python # -*- coding: utf-8 -*- import sys print(sys.argv) # 输出 $ python test.py hello world ['test.py', 'hello', 'world'] # 把执行脚本时传递的参数获取到了
os
# !/usr/bin/env python # -*- coding: utf-8 -*- import os os.system("df -h") # 调用系统命令
结合一下
import os,sys os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行
自己写个模块
python tab补全模块
import sys import readline import rlcompleter if sys.platform == 'darwin' and sys.version_info[0] == 2: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") # linux and python3 on mac
#!/usr/bin/env python # python startup file import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') # history file histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter for Linux
写完保存后就可以使用了
localhost:~ jieli$ python Python 2.7.10 (default, Oct 23 2015, 18:05:06) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import tab
你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里,基本一般都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。
九、打包为.exe可执行文件
Python项目编写完成后,可以将其打包成一个.exe可执行文件,这样就可以在其他计算机上运行该项目,即使这台计算机没有安装python开发环境。
使用Pyinstaller模块打包,该模块支持多种操作系统,如Windows、Linux、Mac OS X等。但是该模块不支持跨平台操作。例如在Windows操作系统下打包的.exe可执行文件,该文件只能在Windows环境下运行。
1、Windows上安装Pyinstaller:
1)在“命令提示符窗口”,进入到python安装路径下的Script下,例如“C:\Program User\Python\Scripts”,如果将这个路径配置到环境变量的话,则可以在任何路径下执行。
执行命令pip install pyinstaller

2)如果是升级或者更新,则使用“pip -install --upgrade pyinstaller”命令。
3)Pyinstaller安装成功后,用pyinstaller --version检测是否安装成功

2、打包
1)打包命令:Pyinstaller + -F + (要打包的.py文件的绝对路径),例如该文件保存在“D:\Study\Python\NewFight\studentsystem”目录中,则可以用如下命令打包:
pyinstaller -F D:\Study\Python\NewFight\studentsystem\studentsystem.py
说明:-F表示生成一个扩展名为.exe的可执行文件。
在python安装路径的script路径下执行,例如“C:\Program User\Python\Scripts”
C:\Program User\Python\Scripts>Pyinstaller -F D:\Study\Python\NewFight\studentsystem\studentsystem.py 305 INFO: PyInstaller: 3.5 305 INFO: Python: 3.6.4 306 INFO: Platform: Windows-10-10.0.18362-SP0 308 INFO: wrote C:\Program User\Python\Scripts\studentsystem.spec 317 INFO: UPX is not available. 326 INFO: Extending PYTHONPATH with paths ['D:\\Study\\Python\\NewFight\\studentsystem', 'C:\\Program User\\Python\\Scripts'] 327 INFO: checking Analysis 327 INFO: Building Analysis because Analysis-00.toc is non existent 327 INFO: Initializing module dependency graph... 333 INFO: Initializing module graph hooks... 333 INFO: Analyzing base_library.zip ... 6736 INFO: running Analysis Analysis-00.toc 6767 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable required by c:\program user\python\python.exe 8257 INFO: Caching module hooks... 8261 INFO: Analyzing D:\Study\Python\NewFight\studentsystem\studentsystem.py 8290 INFO: Loading module hooks... 8301 INFO: Loading module hook "hook-encodings.py"... 8513 INFO: Loading module hook "hook-pydoc.py"... 8517 INFO: Loading module hook "hook-xml.py"... 8913 INFO: Looking for ctypes DLLs 8913 INFO: Analyzing run-time hooks ... 8922 INFO: Looking for dynamic libraries 9801 INFO: Looking for eggs 9801 INFO: Using Python library c:\program user\python\python36.dll 9809 INFO: Found binding redirects: [] 9814 INFO: Warnings written to C:\Program User\Python\Scripts\build\studentsystem\warn-studentsystem.txt 9859 INFO: Graph cross-reference written to C:\Program User\Python\Scripts\build\studentsystem\xref-studentsystem.html 9899 INFO: checking PYZ 9899 INFO: Building PYZ because PYZ-00.toc is non existent 9900 INFO: Building PYZ (ZlibArchive) C:\Program User\Python\Scripts\build\studentsystem\PYZ-00.pyz 10471 INFO: Building PYZ (ZlibArchive) C:\Program User\Python\Scripts\build\studentsystem\PYZ-00.pyz completed successfully. 10489 INFO: checking PKG 10497 INFO: Building PKG because PKG-00.toc is non existent 10497 INFO: Building PKG (CArchive) PKG-00.pkg 12752 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully. 12754 INFO: Bootloader c:\program user\python\lib\site-packages\PyInstaller\bootloader\Windows-32bit\run.exe 12754 INFO: checking EXE 12761 INFO: Building EXE because EXE-00.toc is non existent 12763 INFO: Building EXE from EXE-00.toc 12764 INFO: Appending archive to EXE C:\Program User\Python\Scripts\dist\studentsystem.exe 12769 INFO: Building EXE from EXE-00.toc completed successfully. C:\Program User\Python\Scripts>
2)打包生成的文件说明:
项目目录下新生成__pycache__\studentsystem.cpython-36.pyc
pinstaller环境目录下新生成:
C:\Program User\Python\Scripts\studentsystem.spec
C:\Program User\Python\Scripts\build\studentsystem\****
C:\Program User\Python\Scripts\dist\studentsystem.exe
十、作业练习
作业:购物车程序
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额

浙公网安备 33010602011771号