极客时间零基础学python
代码规范:
pycharm 安装PEP8
cmd窗口输入:pip install autopep8
Tools→Extends Tools→点击加号
Name:Autopep8(可以随便取)
- Tools settings:
- Programs:
autopep8
(前提是你已经安装了哦) - Parameters:
--in-place --aggressive --aggressive $FilePath$
- Working directory:
$ProjectFileDir$
- Programs:
- 点击Output Filters→添加,在对话框中的:Regular expression to match output中输入:
$FILE_PATH$\:$LINE$\:$COLUMN$\:.*
flask快速入门:http://docs.jinkan.org/docs/flask/quickstart.html
函数的定义和常用操作
视频链接https://www.bilibili.com/video/BV1oy4y1v7y2?p=22&spm_id_from=pageDriver
- 创建一个函数,用于接收用户输入的数字,并计算用户输入数字的和
def func1():
two_num = input('请输入两个数字,用空格做分隔:')
# 检查用户输入是否合法
func2(two_num)
num1, *_, num2 = list(two_num)
print(int(num1) + int(num2))
def func2(check_number):
pass
func1()
- 创建一个函数,传入n个整数,返回其中最大的数和最小的数
def func3(*nums):
print(max(list(nums)))
print(min(list(nums)))
func3(1, 5, 8, 32, 654, 765, 4, 6, 7)
- 创建一个函数,传入一个参数n,返回n的阶乘
def fact(num3):
if num3 == 0 or num3 == 1:
return 1
else:
return (num3 * fact(num3 - 1))
print(fact(10))
函数迭代器与生成器
def frange(start, stop, step):
x = start
while x < stop:
#使用迭代器
yield x
x += step
for i in frange(10,20,0.5):
print(i)
lambda函数与内建函数
a=[1,2,3,4,5,6,7]
b=list(filter(lambda x:x>2 , a))
print(b)
reduce函数
from functools import reduce
reduce(lambda x,y: x+y ,[2,3,4],1 )
zip函数
for i in zip((1,2,3),(4,5,6)):
print(i)
d1={'a':'aa','b':'bb'}
d2=zip(d1.values(),d1.keys())
print(d2)
print(dict(d2))
#输出:
<zip object at 0x000002363B6A2F80>
{'aa': 'a', 'bb': 'b'}
函数的闭包
内部函数引用外部函数
举例:两个函数对比,一个使用闭包,一个不使用。
def func():
a = 1
b = 2
return a+b
def sum(a):
def add(b):
return a+b
return add
# add 不加括号表示函数名称或函数的引用
# add() 加括号是表示函数的调用
num1 = func()
num2 = sum(2)
print( num2(4))
print(type(num1))
print(type(num2))
#输出:
6
<class 'int'>
<class 'function'>
闭包举例:实现计数器
#计数器
def counter(FIRST=0):
#定义列表
cnt = [FIRST]
#内部函数
def add_one():
cnt[0] += 1
return cnt[0]
return add_one
num5 = counter(5)
num10 = counter(10)
print(num5())
print(num5())
print(num5())
print(num10())
print(num10())
#输出:
6
7
8
11
12
闭包举例
def a_line(a,b):
def arg_y(x):
return a*x+b
return arg_y
#可以简写成lambda函数
def a_line(a,b):
return lambda x: a*x+b
line1 = a_line(3,5)
line2 = a_line(5,10)
print (line1(10))
print (line1(20))
函数装饰器
# -*- coding: utf-8 -*-
import time
# print( time.time())
#定义装饰器
def timmer(func):
def wrapper():
start_time = time.time()
func()
stop_time = time.time()
print("运行时间是 %s 秒 " % (stop_time - start_time))
return wrapper
#调用装饰器
@timmer
def i_can_sleep():
time.sleep(3)
i_can_sleep()
带参数的装饰器
# -*- coding: utf-8 -*-
def new_tips(argv):
def tips(func):
def nei(a, b):
print('start %s %s' % (argv, func.__name__))
func(a, b)
print('stop')
return nei
return tips
@new_tips('add_module')
def add(a, b):
print(a + b)
@new_tips('sub_module')
def sub(a, b):
print(a - b)
print(add(4, 5))
print(sub(7, 3))
练习一 定义装饰器,用于打印函数执行的时间
- 统计函数开始执行和结束执行的时间
- 扩展练习:为装饰器传入超时时间,函数执行超过指定时间后退出
# 为装饰器传入超时时间,函数执行超过指定时间后退出
# windows下signal.SIGALRM不可用
import time
import signal
def timeout(seconds=10, error_message="Timer expired"):
def decorator(func):
def handler(singnum, frame):
raise TimeoutError(error_message)
def wrapper(*args, **kwargs):
signal.signal(signal.SIGALRM, handler)
signal.alarm(seconds)
try:
result = func(*args, **kwargs)
finally:
signal.alarm(0)
return result
return wrapper
return decorator
@timeout(5)
def getinfo(msg):
print("getinfo start!")
print("msg: %s" % msg)
time.sleep(10)
print("getinfo end!")
return 1
if __name__ == '__main__':
try:
getinfo('Test!')
except TimeoutError as e:
print("time out: %s" % e)
练习二 定义装饰器,实现不同颜色显示执行结果的功能
- 向装饰器传递参数,通过传递的参数获取到输出的颜色
- 被装饰函数的print( )输出根据装饰器得到的颜色进行输出
# 1. 向装饰器传递参数,通过传递的参数获取到输出的颜色
# 2. 被装饰函数的print( )输出根据装饰器得到的颜色进行输出
import sys
def make_color(code):
def decorator(func):
def color_func(s):
if not sys.stdout.isatty():
return func(s)
tpl = '\x1b[{}m{}\x1b[0m'
return tpl.format(code, func(s))
return color_func
return decorator
@make_color(33)
def fmta(s):
return '{:^7}'.format(str(float(s) * 1000)[:5] + 'ms')