python试题

##list与tuple的区别 ?dictionary与set的区别?
对于list与tupel的区别,在《Python核心编程2》中讲解的很清楚,可以总体概括为,可变与不可变、他们本质相同,但是就因为可变性就延伸了很多不同点。如list类型可以进行相应更改和方法操作,但tupel就没有这个功能。

对于dict和set,一个是Python唯一的映射类型,一个是Python集合。python中集合对象(set)是一组无序排列的可哈希的值,包含两种类型:可变集合(set)和不可变集合(frozenset),所以set不是可哈希的,frozenset是可哈希的,能当作字典的键。字典和集合的详细区别可以点这里

##python中String类型和unicode什么关系?
string是字节串,而unicode是一个统一的字符集,utf-8是它的一种存储实现形式,string可为utf-8编码,也可编码为GBK等各种编码格式

##输出从1加到100的和
sum = 0
for i in range(1, 101):
sum += i
print sum

#注意点:range的右范围是取不到的

##如何在一个函数内修改一个全局变量?
在函数中使用global关键字声明全局变量,然后修改。如:

a = 10

def add1():
    global a
    print a + 1

add1()

##except的用法和作用
Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当作一个运行时错误。

以下是使用except的一个例子:

try:    
    foo = opne(“file”) #open被错写为opne    
except: 
    sys.exit(“could not open file!”)

因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题

下面这个例子更好点:

try:
    foo = opne(“file”) # 这时候except只捕获IOError
except IOError:
    sys.exit(“could not open file”)

##如何反序的迭代一个序列?how do I iterate over a sequence in reverse order

如果是一个list, 最快的解决方案是:

list.reverse()
try:
    for x in list:
        “do something with x”
finally:
list.reverse()

如果不是list, 最通用但是稍慢的解决方案是:

#range函数的参数
#第一个:从这个数开始迭代
#第二个:迭代到这个数
#第三个:步长,为负表示倒序
for i in range(len(sequence)-1, -1, -1):
    x = sequence[i]

##判断当前用户是否是root
import os
if os.geteuid() != 0:
print “This program must be run as root. Aborting.”
sys.exit(1)

##什么是lambda函数?
Python允许你定义一种单行的小函数。定义lambda函数的形式如下:labmda 参数:表达式lambda函数默认返回表达式的值。你也可以将其赋值给一个变量。lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个:

>>> g = lambda x, y: x*y
>>> g(3,4)
12
>>> g = lambda x, y=0, z=0: x+y+z
>>> g(1)
1
>>> g(3, 4, 7)
14

也能够直接使用lambda函数,不把它赋值给变量:

>>> (lambda x,y=0,z=0:x+y+z)(3,5,6)
14

如果你的函数非常简单,只有一个表达式,不包含命令,可以考虑lambda函数。否则,你还是定义函数才对,毕竟函数没有这么多限制。

##Python是如何进行内存管理的?
Python的内存管理是由Python得解释器负责的,开发人员可以从内存管理事务中解放出来,致力于应用程序的开发,这样就使得开发的程序错误更少,程序更健壮,开发周期更短

##如何用Python来发送邮件?
以下代码可以在支持SMTP监听器的服务器上执行。

import sys, smtplib

fromaddr = raw_input(“From: “)
toaddrs = raw_input(“To: “).split(‘,’)
print “Enter message, end with ^D:”
msg = ""
while 1:
    line = sys.stdin.readline()
    if not line:
        break
    msg = msg + line

# 发送邮件部分
server = smtplib.SMTP(‘localhost’)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

##Python输出一个Fibonacci数列?

方法一:

a,b = 0, 1
while b<100:
    print (b),
    a, b = b, a+b

方法二:递归

def fibonacci2(n):  
    if n == 1 or n == 2:  
        return 1  
    else:  
        return fibonacci2(n-1) + fibonacci2(n-2)

方法三:迭代

def fibonacci(n):  
    if n == 1 or n == 2:  
        return 1  

    nPre = 1  
    nLast = 1  
    nResult = 0  
    i = 2  
    while i < n:  
        nResult = nPre + nLast  
        nPre = nLast  
        nLast = nResult  
        i += 1  

    return nResult  

##Python里面如何生成随机数?
标准库random实现了一个随机数生成器,实例代码如下:

import random

random.random()

它会返回一个随机的0和1之间的浮点数