Python笔记-1

一、关于python的一些介绍

1、了解编译型与解释型语言

(此区别可理解为从源程序到程序运行过程来看)

编译:将源程序翻译成可执行的目标代码,翻译与执行是分开的。

解释:对源程序的翻译与执行一次性完成,不生成可存储的目标代码。

上述只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。

举个例子:

假如你打算阅读一本外文书,而你不知道这门外语,那么你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读;或者,你也立刻让这名翻译辅助你阅读,让他一句一句给你翻译,如果你想往回看某个章节,他也得重新给你翻译。

2、了解动态语言和静态语言

此区别可理解为从数据类型来看)

动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言。

静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的。

用动态类型的语言编程:

永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby、VBScript属于动态类型语言。

用静态类型的语言编程:

在写程序时要声明所有变量的数据类型。C、C++、C#、JAVA等语言属于静态类型语言。

 

3、了解强类型定义语言和弱类型定义语言

 

强类型定义语言:强制数据类型定义的语言。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

 

举个例子:

如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

 

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

 

强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
python是一门动态解释性的强类型定义语言。

4、了解python的解释器

我们编写Python代码,写的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。常用的python解释器为cpython、除此外还有ipython、pypy等。

CPython:当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

5、了解python2与python3的区别

此处不做深究,只要知道现在流行有两种python版本:分别为python2.x及python3.x即可。后续的编程大部分情况下都是在python3.x版本下进行。

二、Python3.7的安装过程

1、安装包的下载

登录python官网 https://www.python.org/downloads/ 在相应的界面选择版本下载。此处我们选择下载gzip的源码包在linux系统中安装。

 

2、上传安装包

使用rz将安装包放到linux系统的相应目录下,此处不展开说明如何使用rz。

3、安装GCC

安装gcc建议的操作为使用yun groupinstall 安装开发工具(development tools)来安装GCC。

先使用yum grouplist查看系统中是否安装了GCC(阿里提供的一个yum源,http://mirrors.aliyun.com/help/centos)

使用yum groupinstall指令来安装Development Tools

通过上述步骤,GCC已经安装完成。

4、解压及预配

加压上传进linux的tgz包,使用指令tar -zxvf ,进入文件夹执行configure文件配置安装的目录./configure --prefix=/usr/local/python3.6.3

   

5、编译及安装

./执行完成后,使用make&make install来编译安装,编译过程会调用gcc。

在安装过程中经常会出现报错,如此处就报错没有zlib,需要我们安装zlib。

没有zlib那就安装zlib,使用yum install zlib* -y 。注意yum源中存在对zlib版本的情况(建议用光盘的yum 源进行安装,如果配置了一些网络yum源建议先去掉yum配置文件,之后yum clean all)

安装完成后,再make&make install 编译安装即可完成。

注:如果存在多个版本zlib导致安装过程中报错使用yum install -y zlib zlib-devel --setopt=protected_multilib=false来安装

注:在python3.6中不能使用方向键会出现乱码的情况,需要安装yum -y install readline-devel,然后再重新编译python即可解决。

 6、添加环境变量

vi cat /etc/profile
PATH=/usr/local/python3.6.3/bin:$PATH
export PATH
-----------------
#或者做一个软连接连接这个python3
ln -s /usr/python/bin/python3 /usr/bin/python3

三、HELLO WORLD与变量

1、第一个python程序,HELLO WORLD

1 #!/bin/env python3.6 
2 print("Hello python")
3 print('Hello python')
4 print('"Hello python"')
5 print("'Hello python'")
-----------------------------------
Hello python
Hello python
"Hello python"
'Hello python

#!的作用:在linux系统中如果需要用./来执行此py程序的话,系统默认使用bash来执行。bash解释器执行的是shell脚本,并不能执行python程序。所以此处需要用#!告诉系统在./运行该程序的时候使用什么解释器。我们需要使用cpython解释器来解释我们写的代码,所以此处写上我们cpython解释器的位置。(使用which指令可以查看指令的完整位置,可以使用/bin/env python或/bin/env bash来指定解释器)

hello world的程序的注意点:单引号与双引号的使用并不影响输出效果,单引号和双引号的结合使用,用来输出需求的符号。

2、变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。

 

变量的使用方式:变量名=赋值

1 #!/bin/env python3.6
2 name1 = "Zhang San"
3 name2 = name1
4 name1 = "Li Si"
5 print("name1 is",name1,"name2 is",name2)
-----------------------------------------------
name1 is Li Si name2 is Zhang San

该程序的注意点:此程序中有两个变量,分别是name1、name2,需要捋清楚的关系是name1 -赋值-> name2后,修改了name1的内容,此时对name2并没有影响。

变量定义的规则:

  • 变量名只能是字母、数字或下划线的任意组合,_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'

变量命名的规范:

  • python中没有常亮的概念,所以如果定义了一个变量,希望这个变量被用作常量,在下文的代码中不去进行修改时,我们常用全大写字母的方式来表示此变量为常量,如:CHANGLIANG=10010
  • 写变量名要明确,一眼就能明白这个变量要用来做什么,常用下划线和驼峰写法来明确表示变量名,如:Tom_name、TomAge、TomSchool

四、字符编码与代码注释的方法

1、字符编码的发展

ascill 255 8位 1bytes

          ->1980 gb2312 7xxx汉字

              ->1995 GBK1.0 2w+汉字

                 ->2000 GB18030 27xxx汉字

              -> unicode 2bytes 万国码、统一码,单一码

                 ->utf-8  en:1bytes, zh:3bytes

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生

2、两种注释方式

行注释: #注释的内容

批量注释及引用 """注释的内容"""/'''注释的内容'''

#!/usr/local/python3.6.3/bin/python3.6
#_*_coding:utf-8_*_
username = input("username:") password = input("your password:") #imput的使用方法 text=""" 使用三个单引号或双引号能注释,很多行 用双引号 不仅能注释 还能给变量赋值 """ text2=''' 单引号也可以的 '''
--------------------------------
username:yomi
your password:123
yomi 123
使用三个单引号或双引号能注释,很多行
听说
用双引号
不仅能注释
还能给变量赋值
 
单引号也可以的

3、#_*_coding:utf-8_*

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

Python2 默认将变量转换成ascill编码,python3默认将变量转换为unicode编码,由于ascill无法表示中文,所以会出现报错,故python2在运行带中文字符的py文件的时候需要加上#_*_coding:utf-8_*_ ,来告诉python解释器,编译为utf-8的格式。

五、用户交互程序(input、getpass)

1、input的使用

格式:name = input("name:")

2、getpass的使用

使用getpass时需要先导入getpass模块

格式:import getpass

password = getpass.getpass("password:")

3、字符串拼接的多种写法

方法一、逗号写法

print("name1 is",name1,"name2 is",name2)

方法二、加号写法

1 text = """
2 -------- information of """ +name+"""--------
3 age is"""+age+"""
4 level is """+level
5 
6 print(text)

方法三、百分号写法

1 infor="""
2 ----information of %s ----
3 name is %s
4 age is %s
5 salary is %s
6 """%(name,name,age,salary) #直接写不予要有逗号
7 print(infor)
----------------------------------------
%s,用来输出一个字符串
%d,用来输出十进制整数

方法四、花括号定义变量写法

text2="""
---imformation of {_name}--- #注意不能用中括号
name is {_name}
age is {_age}
salary is {_salary}
""".format(_name=name,_age=age,_salary=salary)
print(text2)

方法五、花括号数字写法

1 text3="""
2 ---imformation of {0}--- #引号中用井号并不能起到注释作用,就像现在这样
3 name is {0}
4 age is {1}
5 salary is {2}
6 """.format(name,age,salary)
7 print(text3)

一段综合

 1 import getpass
 2 name = input("your name:")
 3 age = int(input("your age:")) #定义整形
 4 salary = getpass.getpass("input your salary:")
 5 print ("age参数的类型为:",type(age),"salary参数的类型为:",type(salary))
 6 salary = int(salary)
 7 print ("age参数的类型为:",type(age),"salary参数的类型为:",type(salary))
 8 text="""
 9 ---imformation of %s---
10 name is %s
11 age is %d
12 salary is %d
13 """%(name,name,age,int(salary))
14 print(text)
15 text2="""
16 ---imformation of {_name}--- #注意不能用中括号
17 name is {_name}
18 age is {_age}
19 salary is {_salary}
20 """.format(_name=name,_age=age,_salary=salary)
21 print(text2)
22 text3="""
23 ---imformation of {0}--- #引号中用井号并不能起到注释作用,就像现在这样
24 name is {0}
25 age is {1}yomi
26 salary is {2}
27 """.format(name,age,salary)
28 print(text3)
----------------------------------------------------
your name:yomi
your age:25
salary:
age参数的类型为: <class 'int'> salary参数的类型为: <class 'str'>
age参数的类型为: <class 'int'> salary参数的类型为: <class 'int'>

---imformation of yomi---
name is yomi
age is 25
salary is 50000


---imformation of yomi--- #注意不能用中括号
name is yomi
age is 25
salary is 50000


---imformation of yomi--- #引号中用井号并不能起到注释作用,就像现在这样
name is yomi
age is 25
salary is 50000

该程序的注意点:getpass指令在windows环境中使用由问题。需要在linux环境中使用。

六、判断与循环

1、if判断

1 if your_number == REALLY_NUM:
2     print("so good!")
3 elif your_number > REALLY_NUM:
4     print("think bigger")
5 else :
6      print("think smaller")

该程序的注意点:if...elif...elif...else 可以写很多层的elif,后面可以接else。

2、while 循环

 1 count=0
 2 REALLY_NUM = int("100")
 3 while count < 3 :
 4        your_number = int(input("please input your number:"))
 5        if your_number == REALLY_NUM :
 6            print("woo,you got it!")
 7            break
 8        elif your_number > REALLY_NUM:
 9            print("think bigger!")
10        else:
11            print("think smaller")
12        count = count + 1
13 else:
14      print("you have tried too many times,fuck off")

该程序的注意点:while true或while 变量,变量可以在循环中不断赋值。

3.for循环(步长)

 1 #!/usr/local/python3.6.3/bin/python3.6
 2 REALLY_NUM = int ("100")
 3 for i in range(0,3,1):
 4      guess_num = int (input("input your number:"))
 5      if guess_num == REALLY_NUM:
 6            print("woo,you got it")
 7            break
 8      elif guess_num > REALLY_NUM:
 9            print("think bigger")
10      else:
11            print("think smaller")
12 #else: print('GAME OVER')
13 print("GAME OVER")

该程序的注意点:for后面的括号里可以指定范围和步长,for可以接else,for内的break可以跳出for循环包括此else。注意代码中注释的print及最后一个print的区别。

4、continue及break

 1 #!/usr/local/python3.6.3/bin/python3.6
 2 for i in range(3):
 3     print("--------",i,"----------")
 4     for i in range(10):
 5          if i > 6:
 6               print (i)
 7          else:
 8             #continue ----如果注释break有事什么情况
 9             break
10 print("-----------------循环结束---------------")
------------------------------------------------------------------

-------- 0 ----------

-------- 1 ----------

-------- 2 ----------

-----------------循环结束---------------

该程序的注意点:对比程序中注释掉的continue及break,还有注意程序中两次for循环的i值变化。

5、三元运算

1 #!/bin/env python3.6
2 a= 888 if 100 > 99 else 666
3 print (a)
4 x,y,z = 7,8,9
5 i= x if y>z else z
6 print (i)
-----------------------------------
888
9

七、模块初识

程序运行前,需要将程序中所需要使用的模块先import进去,需要注意的是程序名不能和模块名一致(有些情况下不会报错,但不推荐)

1、sys模块的简单用法

sys.path 显示环境变量#不用加()

1 #!/usr/local/python3.6.3/bin/python3.6
2 import sys
3 print(sys.path)
------------------------------
['/root/myfile/my_python_file','/usr/local/python3.6.3/lib/python36.zip', '/usr/local/python3.6.3/lib/python3.6','/usr/local/python3.6.3/lib/python3.6/lib-dynload', '/usr/local/python3.6.3/lib/python3.6/site-packages'

sys.argv 显示文件名,并且和后面的其他参数一起转换为列表,这一作用很重要,用来获取参数 #不用加()

 

#!/usr/local/python3.6.3/bin/python3.6
import sys
print(sys.argv)
------------------------------------------

./20171117_mod_sys_argv.py hello world 1 2 3

['./20171117_mod_sys_argv.py', 'hello', 'world','1','2','3']

2、os模块的简单用法

os.system(“系统指令”):执行系统指令,将执行结果输出到屏幕,不能赋值保存

os.popen(“系统指令”):执行系统指令,将执行结果保存为指针,可以用read()读取

#!/usr/local/python3.6.3/bin/python3.6
import os
os.system("df")#执行并不保存结果
test = os.popen("df")
print(test)
test_read = os.popen("df").read()
print(test_read)
-------------------------------------------------------------\
文件系统          1K-块    已用     可用 已用% 挂载点
/dev/vda1      20510332 4045968 15415848   21% /
devtmpfs         932944       0   932944    0% /dev
tmpfs            942048      24   942024    1% /dev/shm
tmpfs            942048  250588   691460   27% /run
tmpfs            942048       0   942048    0% /sys/fs/cgroup
tmpfs            188412       0   188412    0% /run/user/0
tmpfs            188412       0   188412    0% /run/user/1000
<os._wrap_close object at 0x7fcc683da828>  
 文件系统          1K-块    已用     可用 已用% 挂载点
/dev/vda1      20510332 4045968 15415848   21% /
devtmpfs         932944       0   932944    0% /dev
tmpfs            942048      24   942024    1% /dev/shm
tmpfs            942048  250588   691460   27% /run
tmpfs            942048       0   942048    0% /sys/fs/cgroup
tmpfs            188412       0   188412    0% /run/user/0
tmpfs            188412       0   188412    0% /run/user/100

os.mkdir(“”) 新建文件夹 os.mkdir("new") 输入文件夹名字即可新建

八、pvc与python运行的过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

九、Python的数据类型初识及运算

1、数据类型

数字:int 整数、float 浮点数、complex复数

布尔值:真或假/1或0

字符:‘hello’

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

2.算术运算

算术运算有:加、减、乘、除、取整、求次方的操作

>>> 10 + 5
15
>>> 10-5
5
>>> 10 * 5
50
>>> 9/2
4.5
>>> 9%2
1
>>> 9//2
4
>>> int(9/2)
4
>>> 10 / 3
3.3333333333333335
>>> 10 ** 3
1000
>>> 10 // 3
3
>>> 

该代码的说明://取整操作的结果和int(x)的结果一致,不是四舍五入,是直接取整

3、比较运算

比较运算有:等、 不等于、大于、小于、大于等于、小于等于

>>> 'aa'=='bb'
False
>>> 'aa'!='bb'
True
>>> 'aa'>='bb'
False
>>> 'aa'<='bb'
True
>>> 10 <= 20
True
>>> 10 >= 20
False
>>> 10 => 20
  File "<stdin>", line 1
    10 => 20
        ^
SyntaxError: invalid syntax

该代码的说明:大于等于要写成>=不能写成=>,同理小于等于也是一样。

4、赋值运算

主要注意的是缩写:+=、-=、*=、/=这样的形式 ,x+=1 -> x=x+1、x/=3 -> x=x/3

5、逻辑运算

与或非三种运算。

>>> 1>10 and 5>9
False
>>> 1>10 and 5<9
False
>>> 1>10 or 5<9
True
>>> not 1>10 
True

6、身份运算

>>> a=10
>>> type(a)
<class 'int'>
>>> b=10.1
>>> type(b)
<class 'float'>
>>> c='hello'
>>> type(c)
<class 'str'>
>>> a is int
False
>>> type(a) is int
True
>>> d=[1,2,3]
>>> type(d) is list
True
>>> 

7、成员运算

>>> d=[1,2,3]
>>> type(d) is list
True
>>> 
>>> 3 in d
True
>>> 4 in d
False
>>> 999 not in d
True
>>> 

8、位运算

注意位运算为2的倍数,不是平方、指数上升

>>> 10 <<1
20
>>> 10 << 1
20
>>> 10 << 2
40
>>> 10 << 4
160
>>> 10 >> 4
0
>>> 160 >> 4
10

9、各种运算之间的优先级

计算机能表示的最小单位是二进制位:bit

计算机能存储的最小单位是一个二进制位:bit

 

 

 

 

 

 

 

 

 

posted @ 2017-11-28 00:15  yomi_note  阅读(510)  评论(0编辑  收藏  举报