函数的学习

1、默认参数应该放在最后

2、收集函数

函数参数为收集参数,当不知道参数为多少个时使用收集参数。

def myfunc(*args):
    print("函数有{}个参数".format(len(args)))
    print("打印第{}个函数".format(args[1]))

myfunc(1,2,3)

输出结果:
函数有3个参数
打印第2个函数

 使用元组打包收集参数

def myfunc(*args):
    print(args)
myfunc(1,2,3)

返回多个值,解包

def func2():
    return 1, 2, 3
print(func2()) #返回多个值
x,y,z = func2() #将值解包
print(x)
print(y)
print(z)

使用字典打包收集参数

def func3(**kwargs):
    print(kwargs)
func3(a=2,b=3,c=4)

输出:
{'a': 2, 'b': 3, 'c': 4}

3、闭包:对于嵌套函数来说,外层函数的作用域里面的变量会通过某种形式保留下来,不会像局部变量调用完就消失了

4、装饰器

import time
def myfunc(fun): #使用函数作为参数
    def call_func():
        start = time.time()
        fun() #函数调用
        stop = time.time()
        times = stop - start
        print(f"总共花费了{times:.2f}长时间")
    return call_func #用到闭包

@myfunc
def func():
    time.sleep(2)
    print("func函数执行")

func() #调用func函数就使myfunc函数执行,在不修改代码的前提下,增加其他函数更方便

5、lambda表达式

可以出现在不能使用def定义函数的地方,只能实现一些功能较为简单的函数,而复杂功能的函数交给def function()去解决。

6、生成器

有没有一种办法可以在函数退出之后还能够保留状态,闭包的定义相对复杂,过多的使用全局变量会污染命名空间。生成器:使用yeild代替return

生成器和for循环的区别:生成器只有在输出的时候才会生成元素,像一只不断会下单的母鸡,for循环是将所有元素放在容器中,这些元素是提前已知的

def myfunction():
    x = 0
    while x <= 5:
        yield x
        x+=1
c = myfunction()
print(next(c)) # 0
print(next(c)) # 1
print(next(c)) # 2

斐波那契数列

def fun():
    back1,back2 = 0,1
    while True:
        yield back1
        back1,back2 = back2,back1+back2

f =fun()
print(next(f)) # 0
print(next(f)) #1
print(next(f)) #1
print(next(f)) #2
print(next(f)) #3

7、生成器推导式

把列表推导式的方括号换成圆括号

t = (i**2 for i in range (10))
print(next(t)) # 0
print(next(t)) # 1
print(next(t)) # 45

8、self

把变量变成类变量,直接用类就可以调用这个变量

实例对象和类的方法绑定

类中的方法,每个对象都是共享的

对象自己的属性是私有的

class C:
    def set_x(self, v):
        self.x = v
c = C()
c.set_x(10) 
print(c.x) # 10 对象c的属性值改为10

b = C()
b.set_x(20) #对象b的属性值改为20
print(b.x)
print(b.__dict__) #查看对象b的所有属性
class C:
    x = 0
    def set_x(self,v):
            x = v
c = C()
c.set_x(10)
print(c.x)  # 10 对象c的值不发生改变

9、构造函数 __init__

实例化对象的同时实现个性化

class C:
    def __init__(self, name, age):
        self.name = name
        self.age = age

t = C('小明', 12)
print(t.__dict__) # {'name': '小明', 'age': 12}

s = C("小华", 15)
print(s.__dict__) # {'name': '小华', 'age': 15}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值