##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之间的浮点数