• 第六天


    第一部分 函数初识

    """
    函数:
    作用:
    1. 简化代码
    2. 把功能模块化
    """
    # 打印出5行,每行5个*
    print(("其他的代码块1"))
    for i in range(5):
    print("*"*5)
    print("其他的代码块2")
    for i in range(5):
    print("*"*5)
    print("其他的代码块3")

    一、函数的定义
    # 函数名: 标识符,规则
    # 参数
    # 函数体
    # 返回值

    # 函数的分类:内置函数(内建函数),自定义函数
    1. 内建函数
    print()
    print(abs(-100))
    a=-100
    abs(a)
    print(a)
    print(abs(-100,-90))
    abs()
    abs("a")

    # pass 占位符 : 函数 if
    if 3>1:
    pass
    print()
    for i in range(10):
    pass

    2. 自定义函数
    import keyword
    keyword.kwlist
    """
    格式:
    def 函数名(参数,):
    函数体
    return 返回值: 可以没有 None
    返回值是None(3种):没有return,return None,return
    """

    # def ps():
    # for i in range(5):
    # print("*"*5)
    # 函数的调用
    # 函数名(参数)

    # 函数的参数
    # def ps(line):
    # for i in range(line):
    # print("*"*5)
    # ps(4)
    # ps(5)
    # ps(1)


    二、函数参数的使用
    1.位置参数(必须参数)
    # 位置参数一旦定义了,就必须传入(默认参数情况不考虑)而且按照顺序传入
    def ps(x,line):
    for i in range(line):
    print("*"*x)
    ps(3,5)
    ps(5,1) # 实际参数
    # x line 形式参数
    # 给函数参数进行赋值
    # x=5,line=1

    2. 默认参数
    def ps(line,x=2):
    for i in range(line):
    print("*"*x)
    ps(2,5)
    ps(3)
    # 默认参数和位置参数顺序:位置参数>默认参数
    ps(3)

    # 参数如果是可变对象,那么默认参数会随着函数调用次数而改变
    def f(a=[]):
    a.append("b")
    print(a)
    # f([1,2,3])
    # f([1,2,3])
    f()
    f()

    def f(a=[]):
    if a!=None:
    a=[]
    a.append("b")
    print(a)
    f([1,2,3])
    f([1,2,3])
    f()
    f()

    3. 命名关键字参数:跟位置参数类似(如果有,就必须传(默认参数情况除外))
    命名关键字参数的格式 *,命名关键字参数1,命名关键字参数2,……
    def ps(*,line,x):
    for i in range(line):
    print("*",x)
    # 命名关键字参数的调用:传入名字=值
    ps(line=2,x=3)
    # ps(line=2) # 命名关键字参数个数也需要保证跟定义时候一样(默认参数情况除外)
    # 参数传入的顺序可以不考虑,只有名字保证了
    ps(x=3,line=4)
    # 命名关键字参数的 作用
    # 1. 程序可读性强
    # 2. 传递参数可以忽略顺序
    # 3. 当有默认值的时候,更加简化了调用

    def ps4(*,line=5,x):
    for i in range(line):
    print("*"*x)
    ps4(line=6)
    # 位置参数 > 命名关键字参数
    def ps5(line,*,x):
    for i in range(line):
    print("*",x)
    # 位置参数调用的时候,也是可以 参数名=参数值
    ps5(2,x=4)

    # sort
    a=[1,2,-5,3,4]
    # a.sort(reverse=True) # 降序
    a.sort(key=abs)
    print(a)

    4. 可变参数:收集类型的参数:会把传入所有参数打包成元组的形式,传递给函数进行执行
    * args
    # 求两个数的平方和
    # def s(a,b):
    # return a**2+b**2
    # print(s(1,2))
    # # print(s(1,2,3))
    def s(* args):
    s=0
    for i in args:
    s+=i**2
    return s
    a=(1,2,3)
    print(s(a))
    print(s((1,2,3)))
    # 拆包, *
    print(s(*a))

    # 练习一下 使用可变类型的参数,输入一系列数字,求他们的平方和


    def list_demo():
    li=[1,2,3,4,5,6]
    li[2]=100
    print(li)
    li[2:4]=[33,44]
    print(li)
    # li[2:2]=101
    li[2:2]=[101]
    print(li)
    li[2:2]="abc"
    print(li)

    # 列表的索引赋值的时候,绑定一个元素(可变类型,不可变类型,(序列))
    # 列表的切片赋值的时候,绑定的一定是一个可迭代对象(数值类型、布尔类型)
    li[1]=[1,2,3]
    print(li)

    5. 关键字参数
    ** kwargs:将传入的参数打包成字典,传递给函数 打包
    # 关键字参数,传递参数时,使用字典的形式,有几对键值对,就传几个,属于收集类型参数
    # 需求 name age 进行注册
    def regist(name,age,**kwargs):
    print(name)
    print(age)
    print(kwargs)
    regist("张三",20,job="teacher",gender="male")
    d={"job":"teacher","gender":"male"}

    # 拆包
    regist("张三",30,**d)
    regist("张三",30,job=d["job"],gender=d["gender"])

    6. 参数的组合
    # 【可变参数 * args】 和【命名关键字参数 *,命名关键字参数】 ,不能同时使用
    # def f(*,name,age,* args):
    # def f(* args,* ,name,age,**kwargs)
    #参数名=参数值
    # f(1,3,name="a",age=44,city="dd")
    # 位置参数 > 默认参数 > 命名关键字参数/可变参数 > 关键字参数
    def f1(a,b,c=0,* args,**kwargs):
    print("a={}; b={}; c={}; args={}; kwargs={}".format(a,b,c,args,kwargs))
    # f1
    f1(1,2)
    f1(1,2,3)
    f1(1,2,1,1)
    f1(1,2,3,"hello","python")
    f1(1,2,3,"hello","python",x=90)

    def f2(a,b,c=0,*,d,**kwargs):
    print("a={}; b={}; c={}; args={}; kwargs={}".format(a,b,c,d,kwargs))
    f2(1,2,d=99,e=None)
    f2(1,2,d=99,e="None",e2="dddd")
    # 命名关键字参数和关键字参数一定是用 参数名=参数值
    f2(1,2,e=None,e2="ddd",d="777")

    def f1(a,b,c=0,* args,**kwargs):
    print("a={}; b={}; c={}; args={}; kwargs={}".format(a,b,c,args,kwargs))
    def f2(a,b,c=0,*,d,**kwargs):
    print("a={}; b={}; c={}; args={}; kwargs={}".format(a,b,c,d,kwargs))
    args=(1,2,3,4)
    kwargs={"d":99,"x":"****"}

    f1(args,kwargs)
    f1(*args,**kwargs)

    # f2(args,kwargs)
    args=(1,2,3)
    f2(* args,**kwargs)

    # def f3(a,b,c=0,* args,*,d,**kw):
    # pass

    万能参数
    def fun(* args, **kwargs):
    print("args={} ; kwargs={}".format(args,kwargs))
    fun()
    # 即使是万能参数,使用的时候,也不能随便传入参数,先传入不带名字的,再传入带名字的
    fun(1,2,"e",d=0,c=2)
    kw={"d":66}
    fun(1,2,kw,d=0,c=2)
    # 使用关键字参数的时候,key不能有多个同样的。
    fun(1,2,kw,d=0,c=2)
    # fun(1,2,kw,d=66,d=0,c=2)

    def test(*a,b):
    pass
    # 当在可变参数之后定义位置参数,会把位置参数转换成关键字参数(必须以名字=值)
    test(1,2,3,b="dd")
    # def test1(*a,**kw,b):
    # pass

    # 总结:
    """
    1. 位置参数,必须按照位置顺序。
    2. 默认参数,不能使用可变对象作为默认值。
    3. 命名关键字,必须传入的参数(有默认值的除外)
    4. 可变参数,接受tuple
    5. 关键字参数,接受dict
    6. 可变参数和关键字参数的打包和拆包
    """
    第二部分 返回值
    """
    函数的返回值
    """
    1.返回值
    # 函数名、函数的参数、函数体、返回值
    # 所有函数都有返回值,只不过是None还是非None的区别
    def f():
    pass
    # 功能代码
    # return 返回值
    # return: 写了返回
    # 没有return:仍然相当于在函数的最后一行,定义了return None
    def add(a,b):
    s=a+b
    return s
    print("这一行会不会执行")
    # 函数执行的时候,遇见(1个)return就不会再继续执行
    # 对函数的返回值进行赋值
    s=add(1,3)

    # 返回值的类型: 变量、表达式
    def add1(a,b):
    return a+b
    bb=add(10,2)
    print(bb)

    # 返回值的个数,无论有多少个return,都只能执行第一个return,函数即结束
    def c(a,b):
    return a+b
    return a-b
    return a*b
    print(c(4,5))
    返回多个返回值值, 可以应用元组
    def c1(a,b):
    return a+b,a-b,a*b,a/b
    print(c1(10,2))
    t=c1(10,2)
    print(t)
    # 接受函数多个返回值,可以使用跟返回值数量相同的变量去接返回值
    # 会给变量一一赋值,注意,必须数量一致
    x,y,z,m=c1(10,2)
    print(x,y,z,m)

    定义函数时,习惯是,返回值使用元组类型,预防客户端调用之后修改返回值
    def c2(a,b):
    return [a+b,a-b,a*b,a/b]
    li=c2(10,2)
    print(li)
    li[0]=2000

    # 练习:
    # 1. 自己写一个求绝对值的函数
    def myabs(x):
    if x>=0:
    return x
    else:
    return -x

    # 2. sort key,key用自己写的绝对值函数取排序
    li=[1,2,3,4,5,-9,-6]
    key获得函数的名字,用来运用到列表的每一个元素上,使用函数的返回值,进行排序
    li.sort(key=myabs)
    print(li)
    # li=[[1,2,3],[3,4,5],[3,87,1]]

    # 3. 求一元二次方程的解
    # 4. 计算x的n次方,while解决

    二、函数的传递方式
    # python 不可变类型,可变类型
    传递的是不可变类型的时候,函数中的变量跟调用者的变量值是不同的
    def myfunNo(a=1):
    a=a+2
    print("在myfunNo函数中a=",a)
    x=10
    myfunNo(x)
    print("在调用端x=",x)

    可变类型:函数中的变量跟调用者的变量是同一个对象。
    def myfunYes(L):
    L.append("_new")
    print("在myfunYes中的L",L)
    L=[1,2,3,4]
    myfunYes(L)
    print("在调用端的L=",L)






























  • 相关阅读:
    Go 打印出结构化结构体
    GOPROXY设置
    python判断链表是否有环
    单链表python和go的代码
    mongo索引
    python修改srt字幕的时间轴
    python各个版本的排序
    mac使用python识别图形验证码
    selenium运行js代码笔记
    布隆过滤器
  • 原文地址:https://www.cnblogs.com/ztx695911088/p/9053717.html
Copyright © 2020-2023  润新知