Python 是一门什么样的语言?
python是一门动态解释性的强类型定义语言
动态语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
静态语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
解析:编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的。对解释执行而言,程序运行时的控制权在解释器而不在用户程序;解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。
编译:解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。对编译执行而言,运行时的控制权在用户程序。编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。
强类型语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
弱类型语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
Python优缺点
优点:
-
Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
-
开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
-
高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
-
可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
-
可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
-
可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
缺点:
1.速度慢。
2.代码不能加密。
3.线程不能利用多CPU问题。
Python安装
windows:安装软件,将python的路径加入到windows的环境变量中。计算机属性-高级系统设置-高级-环境变量-系统变量-path(将python的路径加入到path中,注意分号)。
linux:将linux中原有的2.6版本升级为2.7版本。
为了兼容python3.*,现在使用的是python 2.7.10,但是CentOS 6.4中默认使用的python版本是2.6.6,故需要升级版本。
自己做一个yum源,createrepo Packages即可
安装步骤如下:
1,先安装GCC,用如下命令yum install gcc gcc-c++ openssl*
2,下载python-2.7.10.tar.gz文件,修改文件权限chmode +x python-7.5.tar.gz
传送门 https://www.python.org
3,解压tar文件,tar -xzvf python-2.7.5.tar.gz
4,cd python-2.7.5
./configure --prefix=/usr/local/python27 ### 注意:安装在新目录,防止覆盖系统默认安装的python
make && make install
5、建立软连接,使系统默认的python指向python27
mv /usr/bin/python /usr/bin/python2.6.6.old
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python
已经安装完成python的安装或升级的全部操作了,我们再来看一下现在的python的版本:
# python -V
Python 2.7.5
虽然现在python已经安装完成,但是使用yum命令会有问题——yum不能正常工作:
# yum list
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
No module named yum
Please install a package which provides this module, or
verify that the module is installed correctly.
It's possible that the above module doesn't match the
current version of Python
这是因为yum默认使用的python版本是2.6.6,到哪是现在的python版本是2.7.5,故会出现上述问题,只需要该一下yum的默认python配置版本就行了:
#vi /usr/bin/yum
将文件头部的#!/usr/bin/python改为
#!/usr/bin/python2.6
解释器
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py
,那么就需要在 hello.py 文件的头部指定解释器,如下:
#!/usr/bin/env python print("hello world")
如此一来,执行: ./hello.py
即可。
ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py
内容编码
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
#!/usr/bin/env python #_*_ conding:utf-8 _*_ print("你好 世界")
变量
一个在内存存储数据的容器。它保存程序执行的中间结果或者状态,以供后面的代码调用。
变量定义规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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']
定义变量:
!#/usr/bin/env python name1 = "liwenqiang" name2 = "alex"
!#/usr/bin/env python name1 = "liwenqiang" name3 = name1
这样定义变量,分别在内存中创建liwenqiang和alex,如果变成以下定义情况
!#/usr/bin/env python name1 = "liwenqiang" name2 = name1 name1 = "alex" print(name1,name2)
如果是这样,就会输出liwenqiang和alex,不再是liwenqiang和liwenqiang,因为一开始name1和name2都指向liwenqiang,之后name重新指向了alex,但是name2的指向是没有变的。
输入
input(python3)、raw_input(python2)
!#/usr/bin/env python name = input("name:") age = input("age:") job = input("job:") hobby = input("hobby:") info = """ ---------------info %s----------- name = %s age = %d job = %s hobby = %s --------------end---------------- """ %(name,name,age,job,hobby) # %s需要一一对应 占位符:%s表示字符串,%d代表数字 print(info)
流程控制
需求一、用户登陆验证
提示输入用户名和密码
验证用户名和密码
如果错误,则输出用户名或密码错误
如果成功,则输出 欢迎,XXX!
!#/usr/bin/env python # name = input("name:") # password = input("password:") # if name == "liwenqiang" and password == "12345": #不管输入什么都必须加引号 # print("welcome") # else: # print("wrong name or password")
需求二、多个条件判断
if
elif
elif
else
如果成绩大于90,得A,如果成绩大于80,得B,如果成绩大于70,得C,如果成绩大于60得C-,成绩小于60,得D。
!#/usr/bin/env python score = int(input("成绩:")) #此处用int将输入的成绩变为整形,因为在输入成绩是就会变为字符串(例如:“91”),这样就无法进行比较。 if score > 90: print("A") elif score > 80: print("B") elif score > 70: print("C") elif score > 60: print("C-") else: print("D")
用户登录
count = 0
while count < 3:
user = input("username:")
passwd = input("passwd:")
users = []
with open('username.txt','r') as f: --------------username.txt这个文件需要事先创建好。
for line in f:
line = line.strip() #去掉换行符
users.append(line) #将元素line添加到列表中(此处的line是指从文件中读取的内容)
if user in users:
print("user locked!")
elif user == 'liwenqiang' and passwd == '111111':
print('welcome')
break
else:
print('wrong passwd or username, try again!',"you only have",2-count,"chance") #打印多个变量或者字符串,用逗号隔开
count += 1
if count == 3:
with open('username.txt','a') as f: #a和w都是添加(写文件),a相当于追加,w相当于覆盖。
f.write(user+' ') #将user所指的用户去掉空格和换行符添加到文件中,+是连接符。
print('enter wrong usename too many times,username have locked!')