Wiesler

导航

Day3 初识Python

摘要:Python的简介,种类,配置,pycharm的使用和配置,编码,变量,if语句,while循环

Python是由C语言开发而来的,C语言执行效率高,Python开发效率高

编程语言的演变:

  1. 机器码0101…
  2. 汇编语言
  3. C语言(程序员需要自己管理内存,容易奔溃,且类库很少,开发不便)
  4. Java,C#,PHP,Python(高级语言自身有虚拟机,可以管理内存)

高级编程语言:

  • PHP的优势:快速地构建网站。但是其他的后台应用优势不如Python,后端前端都可以做
  • Python的先天优势:Linux自带Python,类库很齐全

Python简介:

  Python由Guido van Rossum开发,首次出现于1991年2月20日,现行稳定版本2.7.11和3.5.1

Python种类:

  • CPython:Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
  • JPython:Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
  • IronPython:Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)
  • PyPy:Python实现的Python,将Python的字节码字节码再编译成机器码。
  • RubyPython:....

一般情况下,主流提到的Python都是CPython

CPython:Python代码->字节码->机器码

PyPy:Python代码->机器码

所以PyPy的效率比CPython更高,忽略了字节码,直接转换成了机器码。

 

编码:

  • ASCII码:计算机起初都使用ASCII码,但是并不能完全表示其他的语言,字符和符号,所以要使用万国码(Unicode)
  • 万国码(unicode):最少两个字节(at least 2Byte):16 bit. 在万国码(Unicode)中,一个中文汉字用3个字节表示
  • UTF-8码:Unicode并不是很完美,对其进行了压缩和划分,产生了utf-8, 英文8位(1个字节),欧洲字符16位(2个字节),东亚24位(3个字节),所以对于代码中可能出现中文或其他字符的需要加上-*- coding: utf-8 -*-

Python代码,文件头部格式:

1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
  • 第1句:实际在Linux中:#!/usr/bin python 为了兼容Unix所以写成#!/usr/bin/env python    在Linux中可以帮助找到解释器,之后可以用./file.py来执行相应的Python文件或者用python file.py来执行。如果无法调用的话,需要修改文件权限,在Linux terminal中输入类似于#chomod 755 file.py
  • 第2句:使用utf-8编码,进而可以兼容更多的字符或符号(python2.7默认采用ASCII编码,需要加上这一句,python3.5默认采用utf-8,可以不加,但是为了统一就一律加上)

Python的安装与配置见Day1 Introduction。那么在Windows cmd中

  • 使用python2.7:输入python27 file.py
  • 使用python3.5:输入python35 file.py
  • 使用#exit()退出解释器

Pycharm(python编译器)主要配置(Interpreter,文字大小,代码风格Dracula,模板,line number)

  • Interpreter:安装pycharm结束后,会自动要求配置,将python2.7和python3.5的.exe文件路径添加进入即可。也可以在file--setting--project--Interpreter里面添加两个python的.exe文件作为两种解释器. 
  • 代码自动校对:如果使用2.7风格,就要在setting--project--Interpreter里选2.7,pycharm会自动验证代码是否符合2.7语法;如果使用3.5则设置为3.5即可
  • 代码的运行:代码的运行也需要配合相应的编译器。对于当前代码文件,可以鼠标右击--run选项,或者点击右上角的绿色播放按钮。如果发现执行的时候并不是按所想的编译器2.7或3.5来执行的,可以在点击播放按钮附近的下拉框里选edit configuration,来选择这个文件的代码运行解释器
  • python模板:在file--settings--editor--code style--file and code template里在python script里添加两行文件头
#!/usr/bin/env python
# -*- coding:utf-8 -*-

可以在模板里再加几个空行,因为注释不能作为文件的唯一内容

pycharm中查看某类型的方法:

  1. 通过type(变量)找到变量类型,再输入变量类型,ctrl+左键单击之后就会看到该类型方法
  2. 直接打印dir(变量),python会自动显示出这个变量所属的类型的所有方法print(dir(变量))
  3. 更详细的信息,通过type找到了变量的类型,help(type(变量))就可以看到这个类型的详细介绍
  4. 对于阅读中不太理解的方法,可以ctrl+左键点击这个方法比如str.upper()就可以定位到该方法介绍

在pycharm中可以通过操作左边第一个和第三个键(show members)查看每个类下边的方法

行号:editor--general--appearance 里选择show line numbers可以显示行号

pycharm的使用:ctrl+?打注释/取消注释 alt+左键点击同时光标选中很多位置  tab缩进  shift+tab取消缩进

python的书写规范:

  1. 运算符号=/+...两边须有空格,
  2. 小括号的左边须有空格,反括号的右边须有空格
  3. 书写时逗号的后边须有空格
  4. 定义函数时,头部要有两个空行
  5. 写注释时,与代码同一行的,#左边空两格,右边空一格。注释单独一行的的,#右边空一格
  6. 变量和函数命名都为小写,可以加_来区分


Python中单行注释用#,多行注释用三引号"""     """

Python引入类库:

Python提供了大量的类库,在安装目录下的Lib文件夹内可找到,运行代码时可以通过import 类库名 来引入类库,引入时不加.py的后缀。引入不仅限于Lib类库中的内容,在工作目录下也可以引入自己写的.py文件,引入之后相当于把file.py文件拿了过来,也会自动运行file.py文件。其内部定义的函数也可以用file.func()来调用。

使用python2.7执行的时候在import引入文件后会生成, 引入文件的.pyc文件,这是字节码文件,python3.5引入的时候不会生成这个字节码文件. 代码编译可以生成字节码,字节码反编译也可以得到代码

用户输入:等待用户输入在2.7中是raw_input(),在3.5中是input()

1 i1 = raw_input("Please input your username:")
2 i2 = raw_input("Please input your password:")
3 print(i1)
4 print(i2)

通过引入类库import getpass来隐匿密码输入的过程(并非是星号不可见,密码输入时也看不到输入)

1 import getpass
2 passwd = getpass.getpass("Please input your password")

用户输出:python2.7的输出print "Hello World"  在python3.5中是print("Hello World"), python2.7可以加括号也可以不加,python3.5需要加括号

引入类库sys,捕获执行python脚本时传入的参数, 就是file.py的路径,它捕获的是python27/35 E:/python/file.py后边的路径部分

1 import sys
2 print(sys.argv)  # ['E:/python/buy.py']

变量

变量定义的规则:不用写var或类型名,直接写  变量名 = 值

  • 变量名只能是 字母、数字或下划线的任意组合(不能有特殊符号如$)

  • Python的变量定义不像JavaScript用var直接写就可以i=123

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

  • 以下关键字不能声明为变量名

  • ['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 name1 = "aaa"
2 name2 = name1
3 print(id(name1))  # 458832163144
4 print(id(name2))  # 458832163144
5 name2 = name2[0]
6 print(name1)  # aaa
7 print(id(name1))  # 458832163144
8 print(id(name2))  # 458828506536

变量name1定义后会指向内存的一个地址,将name2也指向了name1的地址,这样他们就可以都共用这个值aaa了。

为什么name2或者name1改变了,对另一个没有影响呢?

当你给name2或name1重新赋值之后或操作后,系统会给你重新分配一个内存地址,你们不再使用一个地址了,所以对另一方完全没有影响。所以不能认为name1或name2改变后另一个也会改变

方法id() 会获取到变量的内存地址

 

基本数据类型:

字符串类型str:字符串可以用+连接,但确保两边都是字符串类型,如果不是,可以用str()转换

1 str1 = "Hello World"'Hello World' 
2 str2 = "Hello" + "World" + " " + str(123)

数字类型int:

i = 123

布尔值

bool = True 或 bool = False

条件判断:if语句

1 if name == "alex"2    print "超级管理员"
3 elif name == "eric":
4    print "普通管理员"
5 elif name == "tony" or name == "rain":
6    print "业务主管"
7 else:
8    print "普通用户"

注意:

  1. If条件后必须有:冒号

  2. Python不像其他语言有{}来结束代码块,用缩进来表示代码块,所以对于缩进有着严格,近乎变态地追求,如果缩进不一致,则不是一个代码块会报错

  3. 条件判断时,与用and  &,或用or  |   pythong中没有的and和or已经是短路与和短路或了。对于and如果第一个为假就不去判断第二个,对于or如果第一个为真,就不去判断第二个了

  4. 赋值=,判断相等用==,不等于<>或!=

While循环:

1 while 条件:
2      
3     # 循环体
4  
5     # 如果条件为真,那么循环体则执行
6     # 如果条件为假,那么循环体不执行

while循环的定时器:

1 import time
2 while True:
3   print("1")
4   time.sleep(1)#this is a timer, the interval is 1s定时器,每秒执行一下
1 import time
2 i = 0
3 while True:
4   if i == 5:
5       break
6   print("1")
7   i += 1
8   time.sleep(1)#this is a timer, the interval is 1s

while:True的话,循环体内要有一个改变循环的条件,否则会形成死循环

break:break用于退出所有循环

 1 计算1-2+3-4+5-6+....+99
 2 i = 0
 3 total = 0
 4 while True:
 5   if i == 100:
 6       break
 7   if i % 2 != 0:
 8       total += i
 9   else:
10       total -= i
11   i += 1
12 print total

continue:用于跳出当前循环,继续进行下一次循环

1 打印除7以外的10以内的整数
2 i = 1
3 while i <= 10:
4   if i == 7:
5       i += 1 #退出之前还是要让i+1
6       continue
7   print(i)
8   i += 1
 1 三次登录机会
 2 name = "wiesler"
 3 time = 0
 4 while True:
 5   input1 = raw_input("please input username:")
 6   if input1 == "wiesler":
 7       print("Correct")
 8       break
 9   else:
10       time += 1
11   if time == 3:
12       print("You have tried 3 times, you are signed out")
13       break

 

posted on 2016-05-29 00:00  Wiesler  阅读(68)  评论(0)    收藏  举报