一、Python简介

Python是一门计算机编程语言,它是由荷兰人Guido van Rossum在1989年圣诞节期间为了打发无聊的圣诞节而编写的,作为ABC语言的继承

特性:

  • 面向对象、解释型、动态、高级的计算机编程语言,官方定义其是优雅、明确、简单.
  • 开源免费、跨平台、移植性,可以在各种系统上使用
  • 说是容易上手、简单易学、功能强大.
  • 涵盖各种功能的标准库、第三方库.  batteries included (称为内置电池)
  • 让开发者把精力放在解决问题上,而不用太关心底层

应用:

Python近些年在国内很火,一般用来做的事:自动化运维、自动化测试、数据分析、爬虫开发、运维脚本、Web 开发等. 国内有知乎、豆瓣等都大量的应用了python开发,反正很多人都在学,都在搞

Python的类型:

  • cpython, C语言实现的python,默认的解释器
  • Jpython, Java实现的python
  • ipython
  • PyPy, 比较特殊,是python实现的python解释器
  • Rubypthon\ipython...   等等

二、开始Python

1、安装、环境

python可以跨平台,可以在win和linux系统上安装,python目前有2.x和3.x版本,2是主流的使用版本,3是趋势

  • windows平台安装,从官网下载版本,基本上就是下一步
  • linux平台安装
tar xf Python-2.7.11.tgz             # 解压、编译安装
cd Python-2.7.11
./configure --prefix=/usr/local/
make -j2 && make install
mv /usr/bin/python /usr/bin/python2.6.6                # 重命名系统默认的python
ln -s /usr/local/bin/python  /usr/bin/python           # 创建软连接作为系统新的python版本
vim /usr/bin/yum                               # 修改python为python2.6,防止yum使用异常

# python                                           # 查看python版本
Python 2.7.11 (default, Dec 17 2015, 01:08:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

为了方便,添加tab自动补全

vim ~/.pythonstartup     # 添加如下
#!/usr/bin/python
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

添加到~/.bashrc

echo 'export PYTHONSTARTUP=~/.pythonstartup'  >> ~/.bashrc
source ~/.bashrc

测试

[root@python ~]# python
Python 2.7.11 (default, Mar 29 2016, 23:35:44)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.t                            # tab可以补全
os.tcgetpgrp(  os.tcsetpgrp(  os.tempnam(    os.times(      os.tmpfile(    os.tmpnam(     os.ttyname(    

2、彩蛋

>>> import this
The Zen of Python, by Tim Peters<br>
Beautiful is better than ugly.                  # 美丽比丑陋好
Explicit is better than implicit.               # 显示比隐式好
Simple is better than complex.                  # 简单比复杂好
Complex is better than complicated.             # 复杂比更复杂好
Flat is better than nested.                     # 扁平比嵌套好
Sparse is better than dense.                    # 分开比密集好
Readability counts.                             # 可读性很重要
Special cases aren't special enough to break the rules.               # 即使特殊情况也不要打破规则
Although practicality beats purity.
Errors should never pass silently.                                    # 错误不能默默地通过( 精准的捕获异常)
Unless explicitly silenced.                                           # 除非明确要这样做
In the face of ambiguity, refuse the temptation to guess.             # 面对歧义,不要去猜测(去试)
There should be one-- and preferably only one --obvious way to do it. # 应该有一个而且是最好的方法
Although that way may not be obvious at first unless you're Dutch.    # 虽然这并不容易
Now is better than never.                                             # 现在开始做比从来不做好,做之前想清楚
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.            # 如果代码很难解释,不好
If the implementation is easy to explain, it may be a good idea.      # 如果代码很容易解释,好
Namespaces are one honking great idea -- let's do more of those!      # 命名空间是个极好的想法,应该提倡

3、简单代码

>>> print 'hello word'
hello word

当计算器用,跟数学运算一模一样

>>> 1 + 10
11
>>> 10 -1
9
>>> 1 * 2
2
>>> 2 * 1
2
>>> 2 / 2
1
>>> (2+3) * 4
20

当然可以把代码写在写到文件中执行,以.py作为文件的后缀

#!/usr/bin/env python
#coding:utf8               # 指定内容编码
print 'hello,word'
print 1 + 10
print 10 -1
print 2 * 2
print 2 / 2
print (2+3) * 4

4、代码执行过程

从上往下执行,代码读到内存---> 由解释器---> 词法分析 ---> 语法分析 ---> 字节码 ---> pvm

5、注释

  • #, 后面的代码将被忽略
  • ''' ''' 或 """ """     代码将被忽略,一般用来做注释
  • 空行或空格, 将被解释器忽略
#print 'hello,word' # 代码被忽略
'''print 1 + 10'''  # 代码被注释
"""print 1+1"""     # 代码被注释

6、语法规则

强制缩进,以缩进、冒号确定代码的归属、边界,Python会自动检查,好处就是代码看起来风格统一,习惯就好

缩进错误

>>>  print 'Hello,python!'               # 多了个空格,缩进错误
  File "<stdin>", line 1
    print 'Hello,python!'
    ^
IndentationError: unexpected indent

语法错误

#coding:utf8

if True:
    print 'True'
else                                    # 少了:号,语法错误
    print 'False'

结果:
 File "test.py", line 10
    else
       ^
SyntaxError: invalid syntax

三、变量、对象、引用

变量, 可以随时变化的量. 变量是用来保存内存中对象,特定的时间引用特定对象. 与变量对应的还有常量.

1、变量标识符

  • 一切确对象,对象有属性和方法
  • 变量名可以是大小写字母、数字、下划线组成且第一个字符不能为数字
  • 变量名(左侧) = 对象(右侧), 只有对象被创建,变量才能被引用(先右后左)
  • 变量不要和python内部保留标识符冲突
  • 变量在初次赋值时创建,后面赋值将覆盖变量的值
  • 尽量使用有意义、清晰易懂的变量名
>>> var1 = 100                # 定义一个int类型的对象100赋给变量var1
>>> var2 = 'string'           # 定义一个str类型的对象'string'赋给变量var2
>>> var1
100
>>> var2
'string'

过程: 先在内存中创建对象100和string,然后变量指向这些对象,变量与对象之间建立引用关系

>>> id(var1),id(var2)
(25917344, 140258567970032)

可以通过id函数查看对象的内存地址引用

2、变量赋值的方式

基本赋值、序列赋值、链式赋值、增强型赋值、多变量赋值

  • 基本赋值
var1 = 200
var2 = 'strings'
  • 链式赋值(共享引用、复用)
var = var1 = var2 = 'zhang'
id(name),id(name1),id(name2)              # 通过id命令可以发现引用同一对象
(139847989733872, 139847989733872, 139847989733872)

是将字符串对象‘zhang’赋值给var2,var1,var,是对象的共享引用(复用)

  • 序列赋值,通过位置对应,其实就是解包(unpack)
>>> a,b,c,d = 'abcd'
>>> a,b,c,d
('a', 'b', 'c', 'd')
  • 增强型赋值
a += 1        # 等同于 a = a + 1
a -= 1        # 等同于 a = a - 1
a *= 2        # 等同于 a = a * 2
  • 多变量赋值,解包
user1,user2 = 'zhang','li'
>>> user1,user2
('zhang', 'li')
  • 交换位置,不用temp中间值
>>> a,b=1,2
>>> a,b
(1, 2)
>>> a,b=b,a
>>> a,b
(2, 1)

深入:

  • 变量到对象连接关系叫引用,更像是指针
  • 左侧可以是变量名或者对象元素,右侧可以是对象或得到对象的表达式(先右后左)
  • 类型属性对象,而不是变量。变量到对象的连接只是指向关系
  • 共享引用, a = 1;b=a;a=2, b=?,注意共享引用
  • 垃圾回收, 引用计数, a=1;a=2, 对象1会不会立即被删除?
  • 主要解包(unpack),通过位置对应

四、总结

  • python特性,种类,语法规则
  • 变量的定义及规则、赋值的方式、深入

最新文章

  1. 基于Nginx dyups模块的站点动态上下线并实现简单服务治理
  2. app上传到App Store的快捷方法及步骤
  3. 开启PHP exif扩展方法详解
  4. Mac安装win7
  5. Pointcut is not well-formed: expecting &#39;identifier&#39; at character position 0
  6. [转]Web Service Authentication
  7. Java中的装箱拆箱
  8. Mysql表操作
  9. netfilter/iptables 结构要点
  10. Intergate flot with Angular js ——Angular 图形报表
  11. SpringMVC数据验证(AOP处理Errors和方法验证)
  12. ES6的generator函数
  13. vue 自学笔记记录
  14. HDU 1045(炮台安置 DFS)
  15. Xamarin.Android 压缩图片并上传到WebServices
  16. PropTypes使用
  17. CentOS6.5下安装配置MySQL数据库
  18. IntelliJ Idea 跳出括号并且光标移到末尾的快捷键
  19. C#基础篇十小练习
  20. unity纯粹物理驱动方式

热门文章

  1. objective-c 通过类名实例化类
  2. 测试经验总结(&ldquo;二次开发&rdquo;)
  3. 【POJ】3207 Ikki&#39;s Story IV - Panda&#39;s Trick
  4. HDU 4433 locker(SPFA+DP)
  5. 【BZOJ3122】【SDoi2013】随机数生成器
  6. storyboard自动布局时,代码修改 constraint 的值,没有反应
  7. C语言break和continue
  8. [转载]QQ通讯原理及QQ是怎么穿透内网的
  9. ArcGIS AddIN开发异常之--“ValidateAddInXMLTask”任务意外失败
  10. zabbix 服务端