2021-05-16极客时间零基础学python 函数与模块

极客时间零基础学python

image.png

代码规范:

pycharm 安装PEP8
cmd窗口输入:pip install autopep8
Tools→Extends Tools→点击加号

Name:Autopep8(可以随便取)

  • Tools settings:
    • Programs:autopep8 (前提是你已经安装了哦)
    • Parameters:--in-place --aggressive --aggressive $FilePath$
    • Working directory:$ProjectFileDir$
  • 点击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

  1. 创建一个函数,用于接收用户输入的数字,并计算用户输入数字的和
def func1():
    two_num = input('请输入两个数字,用空格做分隔:')
    # 检查用户输入是否合法
    func2(two_num)
    num1, *_, num2 = list(two_num)
    print(int(num1) + int(num2))
def func2(check_number):
    pass
func1()
  1. 创建一个函数,传入n个整数,返回其中最大的数和最小的数
def func3(*nums):
    print(max(list(nums)))
    print(min(list(nums)))
func3(1, 5, 8, 32, 654, 765, 4, 6, 7)
  1. 创建一个函数,传入一个参数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))

练习一 定义装饰器,用于打印函数执行的时间

  1. 统计函数开始执行和结束执行的时间
  2. 扩展练习:为装饰器传入超时时间,函数执行超过指定时间后退出
# 为装饰器传入超时时间,函数执行超过指定时间后退出
# 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)

练习二 定义装饰器,实现不同颜色显示执行结果的功能

  1. 向装饰器传递参数,通过传递的参数获取到输出的颜色
  2. 被装饰函数的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')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容