Python-基础-简介/入门

##Python简介及入门

###python 为什么是python

选择自己喜欢的语言,这往往不容易,更多的是根据需求

话说,之前是java,大学用了三年+实习半年,后来入职做测试开发后,碰到了python

到最后,转python开发了

写起来快,缩进,不用打花括号,省手指,读起来舒服…..

喜欢,貌似不需要什么太牛的理由,用着顺手舒服就行

什么语言之争,编辑器之战啥的,能忽略就忽略吧,能无视就无视吧,工具,够用,用这舒服就ok了,浪费口水精力争来争去图个啥呢

Life is short, I use python!

###简介 python介绍: 到官网自个看

有兴趣可以看看: 解释性语言+动态类型语言+强类型语言

优点缺点: 自己google

国际惯例

交互模式:(主要拿来试验,可以试试 ipython 支持tab自动补全)

$python
>>> print 'hello world'

脚本

#!/usr/bin/env python
print 'hello world'

###环境及其他 基本安装: 自己google[安装和配置一搜一大把,基本技能,不解释,貌似很久之前我也写了一篇http://blog.csdn.net/wklken/article/details/6311292

环境:

建议python2.7 + easy_install + pip + virtualenv + ipython

开发工具:

vim/sublimetext2/eclipse+pydev/pycharm
建议初学idle或者pydev吧,用着顺手就行,

关于编码风格:

谷歌的:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html

中文: http://www.bsdmap.com/articles/zh-google-python-style-guide/


##入门

不扯,开始

###缩进

Python 函数没有明显的 begin 和 end,没有标明函数的开始和结束的花括号。唯一的分隔符是一个冒号 (:),接着代码本身是缩进的。

例子:

:::python
#函数
def func(value):
    print value  #缩进

    if value == 1:
        value += 1
    elif value == 2:
        pass
    else:
        value += 10

###标识符 变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:

1.python中的标识符是区分大小写的。

2.标示符以字母或下划线开头,可包括字母,下划线和数字,大小写敏感

3.以下划线开头的标识符是有特殊意义的。

  • 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;
  • 以双下划线开头的(__foo)代表类的私有成员;
  • 以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。

4.标识符不能是保留字

and            elif        global	or    yield
assert         else        if	    pass
break          except      import   print
class          exec        in	    raise
continue       finally	   is       return
def            for         lambda   try
del            from        not      while

###变量

赋值语句

  • 赋值语句建立对象引用值
  • 变量名在首次赋值时会被建立
  • 变量名在引用前必须先赋值,不能引用未声明赋值的变量

赋值方式

  • 简单赋值

Variable(变量)=Value(值)

s = ‘spam’
  • 多变量赋值

python中原始的元组和列表赋值语句形成,最后已被通用化,以接受右侧可以是是任何类型的序列,只要长度相等即可。注意,长度一定相等

Variable1,variable2,…=Value1,Value2,…

s,h = ‘a’,’b’  元组赋值,位置性  【常用】
[s,h] =[‘a’,’b’] 列表赋值,位置性
a,b,c,d = ‘spam’ 序列赋值,通用性
a,*b = ‘spam’ 拓展序列解包(python3)
  • 多目标赋值

a=b=variable

:::python
s = h = ‘spam’ 多目标赋值

注意:多个变量内存中指向同一对象,对于可变类型需要,修改一个会对其他造成影响

  • 自变赋值

如+=,-=,*=等。

在自变赋值中,python仅计算一次,而普通写法需计算两次;

自变赋值会修改原始对象,而不是创建一个新对象。

:::python
s +=42 增强赋值
x += y

优点:

程序员输入更少

左侧只需计算一次,优化技术自动原处修改,更快
l +=[] 原处修改
l = l+[] 复制,生成新的对象

###运算符 一个表达式可以分解为运算符和操作数

运算符 的功能是完成某件事,它们由如+这样的符号或者其他特定的关键字表示

运算符需要数据来进行运算,这样的数据被称为 操作数

运算符优先顺序列表(从最高到最低)

运算符	描述
'expr'	字符串转换
{key:expr,...}	字典
[expr1,expr2...]	列表
(expr1,expr2,...)	元组
function(expr,...)	函数调用
x[index:index]	切片
x[index]	下标索引取值
x.attribute	属性引用
~x	按位取反
+x,-x	正,负
x**y	幂
x*y,x/y,x%y	乘,除,取模
x+y,x-y	加,减
x<<y,x>>y	移位
x&y	按位与
x^y	按位异或
x|y	按位或
x<y,x<=y,x==y,x!=y,x>=y,x>y	比较
x is y,x is not y	等同测试
x in y,x not in y	成员判断
not x	逻辑否
x and y	逻辑与
x or y	逻辑或
lambda arg,...:expr	Lambda匿名函数

结合规律

运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算

计算顺序

默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果你想要改变它们的计算顺序,你得使用圆括号。好的做法:默认对复杂的运算加括号,而不是依赖于默认结合和计算顺序

###真值 ####真值测试

  • 任何非零数字或非空对象都为真
  • 数字零,空对象以及特殊对象None都为假
  • 比较和相等测试都会递归地运用到数据结构中
  • 比较和相等测试会返回True或False

真值表

对象/常量	值
""	假
"string"	真
0	假
2>=1	真
-2<=-1	真
()空元组	假
[]空列表	假
{}空字典	假
None	假

####布尔表达式 三种布尔表达式运算符

:::python
x and y
x or y
not x

####比较

  • 数字通过相对大小进行比较
  • 字符串时按照字典顺序的,一个字符一个字符比较
  • 列表和元组从左到右对每部分的内容进行比较
  • 字典通过排序后的键值列表进行比较
  • 数字混合类型比较在python3是错误的,但是python2.6支持,固定但任意的排序规则

####布尔数

  • 有两个永远不改变的值True,False
  • 布尔是整型的子类,但不能被再继承
  • 没有__nonzero__()方法的对象的默认值是True
  • 对于值为0的任何数字或空集,值False
  • 在数学运算中,Bollean值的True和False分别对应于1和0

###基本控制流

####if 基本的条件测试语句,用来判断可能遇到的不同情况,并针对不同的情况进行操作

基本形式

if <条件>:
   <语句>
elif <条件>:
   <语句>
else:
   <语句>

注意

python根据缩进判断, elif和else部分是可选的

例子:

:::python
a = 1
b = 2
c = 3;d=4 #两个放一句用分号隔开,不过建议分行

if a < b and c < d:
    print("branch a")
elif a == b:
    print("branch b")
else:
    print("branch c")

switch

python 本身没有 switch 语句,若需要,用if/elif/else实现完成同样的工作,某些情况可以考虑用字典

也可以用dict的形式

if/else三元运算符

A = ((X and Y) or Z)
A = Y  if X else Z
例: a = ‘t’ if x else ‘a’

####for

  • 基本语法

循环控制语句,可以用于循环遍历某一序列

else块可选,在循环终止的时候执行,若是break终止循环,else不执行

格式:

for <对象变量> in <对象集合>:
    if<条件>:
       break
    if<条件>:
       continue
    <其他语句>
else:
    <其他语句>

注意:

1.对象集合可以是列表,字典以及元组等
2.for..in循环对于任何序列都适用
3.for遍历一个字典时,遍历的是字典的键
  • rang & xrange

可以通过range()函数产生一个整数列表,完成计数循环

range([start,] stop[, step])

start可选参数,起始数
stop终止数,若为x,产生从0-(x-1)的整数列表
step可选参数,步长,未写默认为1

range(1,5) 包含序列为 [1,2,3,4]

xrange和range区别

(python3.x的可无视)

在Range的方法中,它会生成一个list的对象,但是在XRange中,它生成的却是一个xrange的对象,当返回的东西不是很大的时候,或者在一个循环里,基本上都是从头查到底的情况下,这两个方法的效率差不多。但是,当返回的东西很大,或者循环中常常会被Break出来的话,还是建议使用XRange,这样既省空间,又会提高效率。

>>> print range(1, 5)
[1, 2, 3, 4]
>>> print xrange(1, 5)
xrange(1, 5)

在上面语句中,range返回了一个普通List,而xrange返回了一个特定的xrange类型的对象。 由于 xrange 方法也创建整数 list(其使用相同参数),所以它与 range 方法非常相似。但是,xrange 方法仅在需要时才在 list 中创建整数。当需要迭代大量整数时,xrange 方法更适用,因为它不会创建极大的 list,那样会消耗大量计算机内存。

####while 与if语句类似,含一个条件测试语句,循环,允许重复执行一个语句块。

可选else语句块,同for的else块。

格式:

while <条件>:
   if <条件>:
      break
   if <条件>:
      continue
   <其他语句>
else:
   <语句>

说明:

  • while循环条件变为False的时候,else块才被执行
  • 若是使用break结束循环,while可选的else块不执行
  • python没有do while或do until循环语句

####break & continue & pass

break,终止循环语句,停止循环,若是for/while循环中终止,其else不执行

continue,结束当前,进入下一轮循环 - 跳到最近所在循环的开头处(来到循环首行)

pass 什么事也不做,只是空占位语句,它用于那些语法上必须要有什么语句,但程序什么也不做的场合

循环else块 :只有循环正常离开时才会执行,即

如果你从for或while循环中break终止 ,任何对应的循环else块将不执行。 记住,break语句也可以在for循环中使用

###其他 ####编写循环的技巧: 在迭代过程中修改迭代序列不安全(只有在使用链表这样的可变序列时才会有这样的情况)。如果你想要修改你迭代的序列(例如,复制选择项),你可以迭代它的复本。使用切割标识就可以很方便的做到这一点

>>> for x in a[:]: # make a slice copy of the entire list
...    if len(x) > 6: a.insert(0, x)

在字典中循环时,关键字和对应的值可以使用 iteritems() 方法同时解读出来

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.iteritems():
...     print k, v
...
gallahad the pure
robin the brave

在序列中循环时,索引位置和对应值可以使用 enumerate() 函数同时得到。

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print i, v

The end!

To be continue

wklken

Email: wklken@yeah.net

Blog: http://blog.csdn.net/wklken

2013-03-16

转载请注明出处,谢谢


python

3870 Words

2013-03-16 08:00 +0800