#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
print('100+200-99 =',100+200-99);
name=input('please enter your name: ');
print('hello,', name);
'''
#数据类型和变量
a = 100
if a>=0:
print(a)
else:
print(-a)
#enumerate
li = [12,24,35,70,88,120,155]
li = [x for (i,x) in enumerate(li) if i not in (0,4,5)]
print li
#逆序
s[::-1]
#dict默认get不存在
dic.get(s,0)+1
#二维数组5*5
print ([[x for x in range(1,26)] [i:i+5] for i in range(0,25,5)])
#格式化
print('hello,%s' % 'world')
print('Hi, %s, you have $%d.' % ('Michael', 1000000))
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
r=(85-72)/85
print('提升了%.1f%%' % r)
#list和tuple
list1 = ['Monica', 'Chandler', 'Rose']
print(len(list1))
list1.append('Joey')
print(list1)
list1.append('Rachel')
print(list1)
list1.insert(1,'Jean')
print(list1)
list1.pop(1)
list1 = ['Apple', 123, True]
print(list1)
list1 = ['python', 'java', ['asp', 'php'], 'scheme']
print(list1)
tuple1 = (1,2,3)
print(tuple1)
#判空
if not s.strip():
print 's is null'
#条件判断
age = 3
if age>=18:
print('your age is',age)
print('adult')
elif age>=6:
print('teenager')
else:
print('kid')
#s = input('birth: ')
birth=2018
#birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
#循环
for item in list1:
print(item)
sum=0
for x in range(101):
sum = sum+x
print('1+2+...+100 =',sum)
#dic(map)和set
dic = {'michael':95, 'bob':73, 'tracy':85}
print('bob:',dic['bob'])
dic['jean']=100
print('jean:',dic['jean'])
print('jean:',dic.get('jean'))
dic.pop('jean')
print(dic)
set1 = set([1,2,3,4,3,2,1])
print(set1)
set1.remove(1)
print(set1)
set2 = set([2,3,4,5,2,1])
print(set1 & set2)
print(set1 | set2)
#函数
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
print(my_abs(-0))
#默认参数在后
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
#可变长参数
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calc([1, 2, 3]))
print(calc((1, 2, 3)))
def calc1(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
nums = [1, 2, 3]
print(calc1(*nums))
print(calc1(1,2,3))
#关键字参数
def person(name, age, **kw):
if 'city' in kw:
# 有city参数
pass
if 'job' in kw:
# 有job参数
pass
print('name:', name, 'age:', age, 'other:', kw)
person('Michael', 30)
person('Bob', 35, city='Beijing')
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
#递归
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
print(fact(100))
#汉诺塔
def move(n, a, b, c):
if n==1:
print(a,'-->',c)
return
move(n-1,a,c,b);
print(a,'-->',c);
move(n-1,b,a,c);
move(3,'A','B','C')
#高级特性
# 切片
L=['Monica','Chandler','Rose','Joey','Rachel']
print(L[:3])
L=list(range(100))
print(L[::5])
print('ABCDEFG'[:3])
def trim(L):
if L[:1] is ' ':
return trim(L[1:])
elif L[-1:] is ' ':
return trim(L[:-1])
else:
return L
if trim('hello ') != 'hello':
print('测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
else:
print('测试成功!')
#迭代
d = {'x': 'A', 'y': 'B', 'z': 'C' }
for k, v in d.items():
print(k, '=', v)
def findMinAndMax(L):
if L:
max=min=L[0]
for item in L:
if item>max:
max=item
elif item<min:
min=item
return (min,max)
return (None,None)
# 测试
if findMinAndMax([]) != (None, None):
print('测试失败1!')
elif findMinAndMax([7]) != (7, 7):
print('测试失败2!')
elif findMinAndMax([7, 1]) != (1, 7):
print('测试失败3!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
print('测试失败4!')
else:
print('测试成功5!')
#列表生成式
#单层循环
print([x * x for x in range(1, 11) if x%2==0]);
#多层循环
print([m + n for m in 'ABC' for n in 'XYZ'])
#列出当前目录下的所有文件和目录名
import os # 导入os模块,模块的概念后面讲到
print([d for d in os.listdir('.')]) # os.listdir可以列出文件和目录
L1 = ['Hello', 'World', 18, 'Apple', None]
print([item.lower() for item in L1 if isinstance(item,str)])
#生成器
g=(x*x for x in range(1,100))
print(next(g))
print(next(g))
g = (x * x for x in range(10))
for n in g:
print(n)
#斐波那契数列
def fib(max):
n,a,b=0,0,1
while n<max:
print(b)
a,b=b,a+b
n=n+1
fib(10)
#复杂生成器yield
#这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def fib(max):
n,a,b=0,0,1
while n<max:
yield b
a,b=b,a+b
n=n+1
#杨辉三角
def triangles():
L = [1]
while True:
yield L
L = [1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]
n = 0
results = []
for t in triangles():
print(t)
results.append(t)
n = n + 1
if n == 10:
break
if results == [
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1],
[1, 8, 28, 56, 70, 56, 28, 8, 1],
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:
print('测试通过!')
else:
print('测试失败!')
#map reduce filter
from functools import reduce
def fn(x, y):
return x * 10 + y
def char2num(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
print(reduce(fn, map(char2num, '13579')))
[x for x in filter(lambda x: x % 2 == 0, range(10))]
#count
list.count(obj)
str.count(sub,start,end)
str.count(sub)https://github.com/kenwoodjw/python_interview_question
#获取当前文件所在目录
path = os.path.dirname(os.path.realpath(__file__))
#csv文件读、写
reader = csv.DictReader(csvfile)
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, lineterminator='\n')
writer.writeheader()
writer.writerow(result)
#使用全局变量
global
类似切面代理实现(闭包)
#早期写法
def debug(func):
def wrapper():
print "[DEBUG]: enter {}()".format(func.__name__)
return func()
return wrapper
def say_hello():
print "hello!"
say_hello = debug(say_hello) # 添加功能并保持原函数名不变
#语法糖写法
def debug(func):
def wrapper(*args, **kwargs): # 指定宇宙无敌参数
print "[DEBUG]: enter {}()".format(func.__name__)
print 'Prepare and say...',
return func(*args, **kwargs)
return wrapper # 返回
@debug
def say(something):
print "hello {}!".format(something)
# 探索functools模块wraps装饰器的用途
import time
from functools import wraps
def timeit(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.clock()
ret = func(*args, **kwargs)
end = time.clock()
print('used:', end - start)
return ret
return wrapper
@timeit
def foo():
print('in foo()')
foo()
#输出
in foo()
used: 3.0344449665474756e-05