zoukankan      html  css  js  c++  java
  • python学习日记(函数基础)

    修改文件(原理)--回顾

    #修改文件(原理)
    with open('name','r',encoding='utf-8') as f,
        open('password','w+',encoding='utf-8') as f1:
        for line in f:
            if '开始' in line:
                line = line.replace('开始','千字文')#替换字符
            f1.write(line)
        f1.seek(0)
        print(f1.read())
    #import后续再详解
    import os
    os.remove('name')#删除'name'文件
    os.rename('password','name')#重命名

    函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。

    python提供了许多内建函数,也可以自己创建函数,这叫做用户自定义函数。

    自定义函数

    简单调用

    s = '天地玄黄'
    def my_len():#定义函数名
        count = 0
        for i in s:
            count += 1
        print(count)
    my_len()#调用函数

    1、没有返回值--返回None

    ①、不写return

    s = '天地玄黄'
    def my_len():#定义函数名
        count = 0
        for i in s:
            count += 1
        print(count)
    l = my_len()
    print(l)

    ②、只写return

    s = ['天地玄黄','1','宇宙洪荒']
    def my_out():#定义函数名
        for i in s:
            if i == '1':
                return#直接结束了一个函数的继续
            print(i)
    l = my_out()
    print(l)

    ③、return None

    s = ['天地玄黄','1','宇宙洪荒']
    def my_out():#定义函数名
        for i in s:
            if i == '1':
                return None#return直接结束了一个函数的继续
            print(i)
    l = my_out()
    print(l)

    2、带有返回值

    s = '天地玄黄'
    def my_len():#定义函数名
        count = 0
        for i in s:
            count += 1
        return count#带有返回值
    print(my_len())

    s = ['天地玄黄','1','宇宙洪荒']
    def my_out():#定义函数名
        for i in s:
            if i == '1':
                print(i)
                return i
    l = my_out()#输出 1 是调用函数执行里面的print(i)打印出来的
    print(l)#输出 1 是 return 返回的

    ①、返回一个值

    def my_one():
        return [1,2,3]
    print(my_one())
    #可以返回任何数据类型,只要返回就可以接收到
    def my_one():
        return {'a':'apple','b':'buy it'}
    print(my_one())

    ②、返回多个值

    1、多个参数进行接收,有多少返回值用多少参数进行接收

    def my_more():
        return 'happy','day'
    a,b = my_more()
    print(a,b)

    2、一个参数进行接收所有返回值,返回的数据类型是一个元组

    def my_more():
        return 'happy','day'
    l = my_more()
    print(l)

    python机制,输入1,2,3逗号隔开就相当于(1,2,3)一个元组。

    函数参数

    def my_len(s):#定义函数名,传递参数--形参
        count = 0
        for i in s:#必须与定义的形参一致
            count += 1
        return count#带有返回值
    l1 = '天地玄黄'
    l2 = 'good life'
    print(my_len(l1))#这里传过去的参数为实际参数--实参
    print(my_len(l2))

    一个小问题:调用互不影响,顺序可能会影响

    def f1(a):
        for i in a:
            print(i,end=' ')
    def f2(b):
        for j in b:
            print(j,end=' ')
    f1([1,2,3])
    f1((7,8,9))
    f2([4,5,6])

    def f1(a):
        f2([4, 5, 6])
        for i in a:
            print(i,end=' ')
    f1([1, 2, 3])#此时调用f1,但f2尚未定义
    def f2(b):
        for j in b:
            print(j,end=' ')

    多个参数

    位置参数

    def my_sum(a,b):#定义求和函数
        print(a,b)
        r = a+b
        return r
    print(my_sum(1,2))
    print(my_sum(2,1))

    关键字参数

    一、

    def my_sum(a,b):#定义求和函数
        print(a,b)
        r = a+b
        return r
    l = my_sum(2,b = 1)
    print(l)

    二、位置参数必须在关键字参数的前面

    def my_sum(a,b):#定义求和函数
        print(a,b)
        r = a+b
        return r
    l = my_sum(a = 2,b)#位置参数必须在关键字参数的前面
    print(l)

    默认参数

    可以不传,会使用默认值,传了使用传的值。

    先位置参数,后默认参数。

    def my_default(name,sex='female'):
        print('姓名:{},性别:{}'.format(name,sex))
    my_default('Miss')
    my_default('Mrs')
    my_default('Mr','male')

    动态参数

    *args(位置参数)

    可接收若干个位置参数

    def my_sum(*args):
        count = 0
        for i in args:
            count += i
        return count
    print(my_sum(1))
    print(my_sum(1,2,3))
    print(my_sum(1,2,3,4,5))

    只能接收位置参数,如果接收关键字参数,会引发异常。

    def test(*args):
        print(args)
    test(1,2,3)
    test(1,2,a = 'oneday')

    def test(*args,a='lalala'):
        print(args,a)
    test(1,2,3)
    test(1,2,a = 'oneday')

    **kwargs(关键字参数)

    可接收若干个关键字参数

    def func(**kwargs):
        print(kwargs)
    func(a = '李白')
    func(a = '李白',b = '杜甫')
    func(a = '李白',b = '杜甫',c = '张爱玲')

    前面就有提到,关键字参数必须在位置参数之后。

    动态参数另一种传参方式

    def sin(*args):
        print(args)
    sin(1,2,3,4,5)
    li = [1,2,3,4,5,['avengers']]
    sin(*li)#给一个序列加上 * ,就是将序列按照顺序传递

    def mul(**kwargs):
        print(kwargs)
    mul(a = 'captain',b = 'loki')
    dic = {'a':'captain','b':'loki'}#字典,无序
    mul(**dic)

    函数参数顺序

    顺序

    a,*args,default = 'none',**kwargs

    位置参数,动态位置参数,默认参数,动态关键字参数

    一、(参数同名错误)

    def func(a,b,*args,default = 'here',**kwargs):
        print(a,b,args,default,kwargs)
    func(1,2)
    func(1,2,999)
    func(1,2,999,default='coming')
    func(1,2,999,default='coming',a = 'aaa',b = 'bbb')#位置参数必须在关键字参数之前。a,b为位置参数

    位置参数不能在关键字参数之后出现

    二、(正确)

    def func(a,b,*args,default = 'here',**kwargs):
        print(a,b,args,default,kwargs)
    func(1,2)
    func(1,2,999)
    func(1,2,999,default='coming')
    func(1,2,999,default='coming',m = 'aaa',n = 'bbb')#

    函数注释

    def func():
        '''
        函数实现功能介绍
        参数1:作用或者数据类型
        参数2:
        :return:返回值
        '''
        pass

    默认参数的陷阱

    如果默认参数的值是一个可变数据类型,调用函数的时候,不传值就会共用这个数据类型。

    def hh(li = []):
        li.append(1)
        print(li)
    hh()        #没传,用了默认
    hh([2,3])   #传了,用的传的
    hh()        #没传,用了默认+1

    def di(k,d = {}):
        d[k] = 'value'
        print(d)
    di(1)# d 参数没传,共用一个默认的字典
    di(2)
    di(3)

    pass

    作者:Gruffalo
    ---------------------------------------------
    天行健,君子以自强不息
    地势坤,君子以厚德载物
    内容仅为自己做日常记录,备忘笔记等
    真小白,努力学习ing...一起加油吧!(ง •̀_•́)ง
  • 相关阅读:
    dpkg 被中断,您必须手工运行 sudo dpkg –configure -a 解决此问题
    运行wpscan报错Could not find 'nokogiri' (~> 1.8.0)
    理解:jar和war的区别
    AcWing3494. 国际象棋(状压DP)
    AcWing3422. 左孩子右兄弟(树形DP)
    python命名空间
    mysql日志大量报错“original commit timestamp is more recent than the immediate commit timestamp”
    python模块导入
    Centos-Docker镜像制作
    python面向对象之封装
  • 原文地址:https://www.cnblogs.com/smallfoot/p/10017026.html
Copyright © 2011-2022 走看看