Python小白入门的学习记录 3

131 阅读3分钟

函数

函数的定义

函数:对程序逻辑进行结构化的一种编程方法

定义: ** def 函数名称():

代码

return 需要返回的内容**

函数关键字参数的使用

print 含有五个参数,需按顺序填写。若单独使用后面4个参数,需要使用参数=''的形式。

如图所示

QQ图片20210406173512.png

函数分别赋值

` def func(a,b,c):

print('a=%s' %a)

print('b=%s' %b)

print('c=%s' %c)

func(1,2,3)`

所示结果 a=1 b=2 c=3

函数的变量作用域

var1=123 def func(): var1=233 print(var1) func() print(var1)

所示结果 var=123 var=233

当在函数内部定义值后会把外部定义的值覆盖

函数内外定义的值都被调用

使用 global 把函数内部var1=233

改为

global var1

var1=233

所示结果 var1=233 var1=233

迭代器与生成器

迭代器:iter

list1={1,2,3}
it=iter(list1)
print(next(it))

所示结果:1

特点:依次取值

生成器:yield

def frange(start,stop,step ):#生成器制作 浮点数range
 x=start
 while x<stop:
     yield x #一次只输出一个值,记录当前位置
     x+=step
     for i in frange(10,20,0.5):
         print(i)

所示结果 10,10.5,11....

Lambda表达式

lambda x:x<=(month,day)
||
def func1(x):
    return x<=(month,day)

lambda item:item[1]
||
def func2(item):
    return item[1]

内建函数

①filter(函数/空,迭代器) 把满足函数的迭代数取出来

a=[1,2,3,4,5,6,7]
print(list(filter(lambda x:x>2,a)))

所示结果:[3,4,5,6,7]

使用filter和lambda需要强制list转换

②map(函数,,传递多个参数) 将多个参数依次处理

a=[1,2,3]
b=[2,3,5]
print(list(map(lambda x,y:x+y,a,b)))

所示结果:[3,5,8]

③reduce(函数,序列,初始值) 将依次序列和初始值按照函数的方式做运算

reduce(lambda x,y:x+y,[2,3,4],1)

所示结果 (1+2)+3+4=10

③zip(多个元素) key与value的对调

x=zip((1,2,3),(4,5,6))
for i in x:
    print(i)

所示结果:(1,4)(2,5)(3,6)

可使用for in的形式取值说明为迭代函数 拥有iter形式


x={'a':'aa','b':'bb'}
y=zip(x.values(),x.keys())
print(dict(y))

所示结果:{'aa': 'a', 'bb': 'b'}

闭包

闭包:外部函数被内部函数引用。类似函数嵌套

def sum(a):    #外部函数
    def add(b):    #内部函数
        return a+b
    return add #返回内部名称
#使用add 称函数名称或者函数的引用
#使用add() 称函数的调用
num1=func()
num2=sum(2) #num2相当于内部函数
print(num2(4))

所示结果:6

闭包实现运算

def a_line(a,b):    #外部函数
    def arg_y(x):    #内部函数
        return a*x+b
    return arg_y #返回内部名称
line=a_line(3,5) #a,b的值
print(line(10)) #x的值

所示结果:35

装饰器

增加额外功能但不需要额外的代码

time库

sleep方法:运算时间暂停几秒

time方法:1970年1月1日秒数时间统计

import time
print(time.time())
time.sleep(3)#暂停3

函数的运行时间

import time
def i_can_sleep():
    time.sleep(3)
start=time.time()
i_can_sleep()
stop=time.time()
print('函数运行了%s秒'%(stop-start))

所示结果:函数运行了3.000880718231201秒

@xxx 装饰器

def timer(func):
     def wrapper():
        start=time.time()
        func()
        time.sleep(3)
        stop=time.time()
        print('函数运行了%s秒'%(stop-start))
        return wrapper
@timer #装饰器
def i_can_sleep():#i_can_sleep被装饰函数
         time.sleep(3)
         i_can_sleep()
#timer调用i_can_sleep函数 传递到timer 接收一个func变量 func传递内部函数wrapper

带参数的装饰器

#带参数的装饰器
#两个数的累加和
def new_tips(argv):#argv接收new_tips装饰器add,del参数的传递
    def tips(func):
        def nei(a,b):#a,b传递到内部函数
            print('start %s %s'%(argv,func.__name__)) #func.__name__取函数名。func为外部函数tips传进的名称
            func(a,b)
            print('stop %s %s'%(argv,func.__name__))
        return nei #返回给tips
    return tips #返回给new_tips
    @new_tips('add') #带参数装饰器
def add(a,b):
    print(a+b)
@new_tips('del')
def sub(a,b):
    print(a-b)
print(add(5,4))
print(sub(5,4))

**所示结果:**
start add add
9
stop add add
None
start del sub
1
stop del sub
None

上下文管理器

with

f=open('name.txt')
try:   #为了保证打开文档无读取异常 用try进行封装
    for line in f:
        print(line)
finally: #打开失败
    f.close()

可简化成
    with open('name.txt') as f:
        for line in f:
            print(line)

模块

定义

通俗就是需要导入的已有代码段

写法:

import 模块名称

form 模块名称 import 方法名

import os
os.所有方法

import matplotlib as m #将模块重命名为m
m.xxx

#不使用 模块.xxx方法
form time import sleep
sleep()

#自定义模块
import 自创文件名

语法规范

www.python.org/dev/peps/pe…

小tips:整体右移 按Tab