Python编程入门——基础语法详解

一、基本概念

1.内置的变量类型:

Python是有变量类型的,而且会强制检查变量类型。内置的变量类型有如下几种:

#浮点
float_number  =   2.3
#复数
complex_number  =   1   +  5 j
#整型
integer_number  =  1  
#list 序列
sample_list  =  [2 ,52 , 36 , 'abc' ]  
#嵌套
sample_nest  =  [( 2 , 4 , 6 ),{5 :7 ,9 :11 , 'key' :[2 ,5 ]},6 ]
#dictionary 字典
sample_dic  =  { "key" :value, 5 :10 }  
#tuple 只读的序列
sample_tuple  =  (3 , 9 , "ab" )

从上面的示例可以看出,python的变量无需声明,可直接给变量赋值。

2.字符串

python中声明一个字符串通常有三种方法,''、" "和''' ''',这三种方法在声明普通字符串时的效果是完全一样的,区别在于字符串本身中存在引号的情况,举例如下:

word  =  'good'
sentence  =  "hello world"
paragraph  =  '''good noon:"nice to meet you."'''

python中单行注释采用#开头。

#!/usr/bin/python
# First comment
print  "Hello, world!" ;   # second comment

上述内容输出:hello,Python!。注释可以在语句或表达式行末。

多行注释可采用三引号,比如:

'''This is a comment.
This is a comment, too.
This is a comment, too.
I said that already.'''

转义符 '\';

自然字符串, 通过在字符串前加r或R。 如 r"this is a line with \n" 则\n会显示,并不是换行。

python允许处理unicode字符串,加前缀u或U, 如 u"this is an unicode string"。

3.Python标识符

在python里,标识符有字母、数字、下划线组成。

在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

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

以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入;

以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。

4.Python保留字符

下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。

所有Python的关键字只包含小写字母。

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

5.行和缩进

学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。如下所示:

if  True :
     print  "True"
else :
   print  "False"

上述,if与else的缩进空白数量相同。以下代码将会报错:

if  True :
     print  "Answer"
     print  "True"
else :
     print  "Answer"
   print  "False"

python中分号;标识一个逻辑行的结束,但是实际中一般每个物理行只写一个逻辑行,可以避免使用分号。这样书写便于阅读。注意:不要混合使用空格和制表符来缩进,因为在跨越不同的平台时无法正常工作。

多个物理行中可以写一个逻辑行,使用行连接符\,如下:

=  "peter  is  \
writing this article"

二、运算符与表达式

1. 运算符与其用法

运算符
名称
说明
例子
+ 两个对象相加 3+5得8。’a‘+’b‘得’ab‘。
- 得到负数或是一个数减去另一个数 -5.2得到一个负数。50 - 24得到26。
* 两个数相乘或是返回一个被重复若干次的字符串 2 * 3得到6。'la' * 3得到'lalala'。
** 返回x的y次幂 3 ** 4得到81(即3 * 3 * 3 * 3)
/ x除以y 4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333
// 取整除 返回商的整数部分 4 // 3.0得到1.0
% 取模 返回除法的余数 8%3得到2。-25.5%2.25得到1.5
<< 左移 把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1)  2 << 2得到8。——2按比特表示为10
>> 右移 把一个数的比特向右移一定数目 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。
& 按位与 数的按位与 5 & 3得到1。
| 按位或 的按位或 5 | 3得到7。
^ 按位异或 数的按位异或  5 ^ 3得到6
~ 按位翻转 x的按位翻转是-(x+1) ~5得到6。
< 小于 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。
> 大于 返回x是否大于y 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。
<= 小于等于 返回x是否小于等于y  x = 3; y = 6; x <= y返回True。
>= 大于等于 返回x是否大于等于y  x= 4; y = 3; x >= y返回True。
== 等于 比较对象是否相等 x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。
!= 不等于 比较两个对象是否不相等 x = 2; y = 3; x != y返回True。
not 布尔“非” 如果x为True,返回False。如果x为False,它返回True。 x = True; not y返回False。
and 布尔“与” 如果x为False,x and y返回False,否则它返回y的计算值。 x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。
or 布尔“或” 如果x是True,它返回True,否则它返回y的计算值。 x = True; y = False; x or y返回True。短路计算在这里也适用。

2. 运算符优先级(从低到高)

运算符
描述
lambda Lambda表达式
or 布尔“或”
and 布尔“与”
not x 布尔“非”
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
<<,>> 移位
+,-  加法与减法
*,/,% 乘法、除法与取余
+x,-x 正负号
~x

按位翻转

** 指数
x.attribute 属性
x[index] 下标
x[index:index] 寻址段
f(arguments...) 函数调用
(experession,...) 绑定或元组显示
[expression,...] 列表显示
{key:datum,...} 字典显示
'expression,...' 字符串转换

三、控制流

1. 条件语句

1.1 if语句

例子, 执行if语句内的程序

=  input ( "a:" )
=  input ( "b:" )
if (a > b):
     print  a,  " > " , b

 if else语句:

=  input ( "a:" )
=  input ( "b:" )
if (a > b):
     print  a,  " > " , b
else :
     print  a,  " < " , b

1.2  if…elif…else语句

例子:根据输入的分数,输出分数等级:

score  =  raw_input ( "score:" )
score = int (score)
if (score > =  90 and  (score < =  100 ):
     print  "A"
elif (score > =  80 and  (score <  90 ):
     print  "B"
elif (score > =  60 and  (score <  80 ):
     print  "C"
else :
     print  "D"

raw_input() 读取输入值。

 1.3 if语句的嵌套

编写条件语句时,应该尽量避免使用嵌套语句。嵌套语句不便于阅读,而且可能会忽略一些可能性。

=  - 1
=  99
if (x > =  0 ):
     if (x >  0 ):           #嵌套的if语句
         =  1
     else :
         =  0
else :
     =  - 1
print  "y =" , y

1.4 实现switch语句的功能

python中没有switch特殊字,Python可以通过字典实现switch语句的功能。

实现方法分两步。首先,定义一个字典。字典是由键值对组成的集合。其次,调用字典的get()获取相应的表达式。

from  __future__  import  division
=  1
=  2
operator  =  "/"
result  =  {
     "+"  : x  +  y,
     "-"  : x  -  y,
     "*"  : x  *  y,
     "/"  : x  /  y
}
print  result.get(operator)

输出为0.5;

另一种使用switch分支语句的方案是创建一个switch类,处理程序的流程。

a) 创建一个switch类,该类继承自Python的祖先类object。调用构造函数init( )初始化需要匹配的字符串,并需要定义两个成员变量value和fall。Value用于存放需要匹配的字符串,fall用于记录是否匹配成功,初始值为false,标识匹配不成功。如果匹配成功,程序往后执行。

b) 定义一个match( )方法,该方法用于用于匹配case子句。这里需要考虑三种情况:首先是匹配成功的情况,其次是匹配失败的默认case子句,最后是case子句中没有使用break中断的情况。
c) 重写__iter__( )方法,定义该方法后才能使switch类用于循环语句中。__iter__( )调用match( )方法进行匹配。通过yield保留字,使函数可以在循环中迭代。此外,调用StopIteration异常中断循环。
d) 编写调用代码,在for…in…循环中使用switch类。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
  
class  switch( object ):
     def  __init__( self , value):       # 初始化需要匹配的值value
         self .value  =  value
         self .fall  =  False            # 如果匹配到的case语句中没有break,则fall为true。
  
     def  __iter__( self ):
         yield  self .match             # 调用match方法 返回一个生成器
         raise  StopIteration          # StopIteration 异常来判断for循环是否结束
  
     def  match( self * args):          # 模拟case子句的方法
         if  self .fall  or  not  args:    # 如果fall为true,则继续执行下面的case子句
                                     # 或case子句没有匹配项,则流转到默认分支。
             return  True
         elif  self .value  in  args:     # 匹配成功
             self .fall  =  True
             return  True
         else :                        # 匹配失败
             return  False
  
operator  =  "+"
=  1
=  2
for  case  in  switch(operator):         # switch只能用于for in循环中
     if  case( '+' ):
         print  +  y
         break
     if  case( '-' ):
         print  -  y
         break
     if  case( '*' ):
         print  *  y
         break
     if  case( '/' ):
         print  /  y
         break
     if  case():                       # 默认分支
         print  ""

2.while...语句

只要在一个条件为真的情况下,while语句允许你重复执行一块语句。while语句是所谓 循环 语句的一个例子。while语句有一个可选的else从句

while  True :
     pass
else :
     pass
#else语句可选,当while为False时,else语句被执行。 pass是空语句。

3.for 循环

for  in  range ( 0 5 ):
     print  i
else :
     pass
# 打印0到4

注:当for循环结束后执行else语句;range(a, b)返回一个序列,从a开始到b为止,但不包括b,range默认步长为1,可以指定步长,range(0,10,2);

四、函数

函数通过def定义。def关键字后跟函数的标识符名称,然后跟一对圆括号,括号之内可以包含一些变量名,该行以冒号结尾;接下来是一块语句,即函数体。

def  sumOf(a, b):
     return  +  b

4.1 局部变量

在函数内定义的变量与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。这称为变量的作用域。global语句, 为定义在函数外的变量赋值时使用global语句。

def  func():
     global  x
     print  "x is " , x
     =  1
=  3
func()
print  x

以上代码,输出的结果为:

3

1

4.2 默认参数

通过使用默认参数可以使函数的一些参数是‘可选的’。

def  say(msg, times  =   1 ):
     print  msg  *  times
say( "peter" )
say( "peter" 3 )

注意:只有在形参表末尾的那些参数可以有默认参数值,即不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参,只是因为赋给形参的值是根据位置而赋值的。

4.3 关键参数

如果某个函数有很多参数,而现在只想指定其中的部分,那么可以通过命名为这些参数赋值(称为‘关键参数’)。

优点:不必担心参数的顺序,使函数变的更加简单;假设其他参数都有默认值,可以只给我们想要的那些参数赋值。

def  func(a, b = 2 , c = 3 ):
     print  "a is %s, b is %s, c is %s"  %  (a, b, c)
func( 1 #输出a is 1, b is 2, c is 3
func( 1 5 #输出a is 1, b is 5, c is 3
func( 1 , c  =  10 #输出a is 1, b is 2, c is 10
func(c  =  20 , a  =  30 #输出a is 30, b is 2, c is 20

4.3 return语句

return语句用来从一个函数返回,即跳出函数。可从函数返回一个值。

没有返回值的return语句等价于return None。None表示没有任何东西的特殊类型。

你可能感兴趣的