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";
 }
C++
#include <stdio.h>
int main(void)
{
printf("\nhello world!");
return 0;
}
C
public class HelloWorld{
   // 程序的入口
   public static void main(String args[]){
   // 向控制台输出信息
    System.out.println("Hello World!");
   }
 }
JAVA
 <?php  
             echo "hello world!";  
 ?> 
PHP
puts "Hello world." 
RUBY
package main

import "fmt"

func main(){

    fmt.Printf("Hello World!\n God Bless You!");

}
GO

 

五、变量\字符编码

声明变量

#_*_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
FOR 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
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

 十、作业练习

作业:购物车程序

      1. 启动程序后,让用户输入工资,然后打印商品列表
      2. 允许用户根据商品编号购买商品
      3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
      4. 可随时退出,退出时,打印已购买商品和余额

 

posted @ 2018-05-22 10:34  航松先生  阅读(168)  评论(0)    收藏  举报