来自一名java开发人员的python学习(基础语法)

交互式运行

可以不用写文件,直接CLI执行以下命令

python

就可以继续如同cli界面运行,及时反馈

下划线

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

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

缩进

为了避免各种系统带来阅读上的差异,使用空格代替tab,一般采用4个

引号

  • 单引号
  • 双引号
  • 三个单引号

变量赋值

a = b = c = 1
a, b, c = 1, 2, "john"

pass

Python pass 是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句。

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
 
# 输出 Python 的每个字母
for letter in 'Python':
   if letter == 'h':
      pass
      print '这是 pass 块'
   print '当前字母 :', letter
 
print "Good bye!"

执行后结果如下

当前字母 : P
当前字母 : y
当前字母 : t
这是 pass 块
当前字母 : h
当前字母 : o
当前字母 : n
Good bye!

注意h还是被打印了,这说明pass和continue是不一样的,pylthon本身也是有continue的

list

数据类型

python的列表中数据类型可以不一样,这点和java.util.List更像,和[]倒是不一样


list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]

元组

元组相当于只读的list

运算

** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000

取整除

// 取整除 - 返回商的整数部分(向下取整)

>>> 9//2
4
>>> -9//2
-5

逻辑运算符

and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False
注意python使用的是单词而不是符号来进行逻辑运算

成员运算符

in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True

is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

控制语句

if & while

这个和java类似,只是用后接冒号代替了用括号括起来

for

var

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for letter in 'Python':     # 第一个实例
   print '当前字母 :', letter
 
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二个实例
   print '当前水果 :', fruit
 
print "Good bye!"

这种foreach的方式在java中称为增强的for循环

index

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print '当前水果 :', fruits[index]
 
print "Good bye!"

这种是通过下标来取数据

else

常规使用

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for num in range(10,20):  # 迭代 10 到 20 之间的数字
   for i in range(2,num): # 根据因子迭代
      if num%i == 0:      # 确定第一个因子
         j=num/i          # 计算第二个因子
         print '%d 等于 %d * %d' % (num,i,j)
         break            # 跳出当前循环
   else:                  # 循环的 else 部分
      print num, '是一个质数'

注意这里的else是和break搭配使用的,对于一个for(这里是里面的那个),只会触发一个.由于break一般是配合if使用,所以这里也可以看作是那个ifelse,这个结论大致正确,更详尽的研究参见python中else的研究

函数

def

return

关键字参数

使用关键字参数时参数顺序可以任意

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print "Name: ", name
   print "Age ", age
   return
 
#调用printinfo函数
printinfo( age=50, name="miki" )

默认参数

不定长参数

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print "输出: "
   print arg1
   for var in vartuple:
      print var
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )

匿名函数

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )

全局变量和局部变量

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2 # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total
 
#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total

调用结果如下

函数内是局部变量 :  30
函数外是全局变量 :  0

注意全局变量并未改变
如果想使用全局变量需要使用globe来声明

total = 0  # 这是一个全局变量

# 可写函数说明
def sum(arg1, arg2):
    global total
    print(total)
    total = 3
    return total


# 调用sum函数
sum(10, 20)
print("函数外是全局变量 : ", total)

注意变量要先声明后使用,这意味着上面的语句中globe不能在print语句下面,并且global total=3是不合法的

异常

捕获异常

大致格式如下

try:
<语句>        #运行别的代码
except <名字><语句>        #如果在try部份引发了'name'异常
except <名字><数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句> 

当然,也支持finally

try:
<语句>
finally:
<语句>    #退出try时总会执行

抛出异常

raise [Exception [, args [, traceback]]]

定义异常

异常应该是典型的继承自Exception类,通过直接或间接的方式。以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

在你定义以上类后,你可以触发该异常,如下所示:

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章