首页 > 技术文章 > python之路-python初识

l-w-q 2016-10-12 15:00 原文

Python 是一门什么样的语言?

python是一门动态解释性的强类型定义语言

 

动态语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。

静态语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

 

解析:编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的。对解释执行而言,程序运行时的控制权在解释器而不在用户程序;解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。

编译:解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。对编译执行而言,运行时的控制权在用户程序。编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。

强类型语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

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

 

Python优缺点

优点:

  1. Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

  2. 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

  3. 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

  4. 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

  5. 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

  6. 可嵌入性————你可以把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")

 

外层变量,可以被内层代码使用
内层变量,不应被外层代码使用
 

用户登录

1.只有三次登陆机会
2.第三次输入错误,锁定用户
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+'\n') #将user所指的用户去掉空格和换行符添加到文件中,+是连接符。
print('enter wrong usename too many times,username have locked!')

 

 

推荐阅读