函数

Posted bijian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数相关的知识,希望对你有一定的参考价值。

1、形参与实参

形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定。

2、参数类型

  2.1 位置参数:按照从左到右的顺序定义的参数。            位置形参:必选参数          位置实参:按照位置给形参传值

  2.2 关键字参数:按照key=value的形式定义的实参,无需按照位置为形参传值

  注意:(1)关键字实参必须在位置实参右面  (2)对同一个形参不能重复传值

  2.3 默认参数:形参在定义时就已经为其赋值,可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)。

  注意:(1)只在定义时赋值一次(2)默认参数的定义应该在位置形参右面(3)默认参数通常应该定义成不可变类型

  2.4 可变长参数:可变长指的是实参值的个数不固定,而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs。

  2.5 命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递,可以保证,传入的参数中一定包含某些关键字。

#-------------*args----------------
def a(x,y,*args):
    print(x,y,args)
a(1,2,3,4,5,6)
# 1 2 (3, 4, 5, 6)
a(1,2,*[3,4,5,6])
# 1 2 (3, 4, 5, 6)

def a(x,y,z):
    print(x,y,z)
a(*[1,2,3])
# 1 2 3
#-------------**kwargs--------------
def a(x,y,**kwargs):
    print(x,y,kwargs)
a(1,2,b=3,c=4,d=5)
# 1 2 {‘b‘: 3, ‘c‘: 4, ‘d‘: 5}
a(1,y=2,b=1,c=2,d=3)
# 1 2 {‘b‘: 1, ‘c‘: 2, ‘d‘: 3}
a(1,2,**{"b":4,"c":5,"d":6})

def a(x,y,z):
    print(x,y,z)
a(**{"z":4,"y":5,"x":6})#必须一样
# 6 5 4
#---------*args+**kwargs-------------
def a(x,y):
    print(x,y)
def b(*args,**kwargs):
    print("----")
    a(*args,**kwargs)
def a(x,y,*args,a=1,b,**kwargs):
    print(x,y)
    print(args)
    print(a)
    print(b)
    print(kwargs)
a(1,2,3,4,5,b=3,c=4,d=5)

 3、摘录别人的练习题:

3.1 写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作。

技术分享图片
def modify_file(filename,old,new):
    import os
    with open(filename,r,encoding=utf-8) as read_f,        open(.bak.swap,w,encoding=utf-8) as write_f:
        for line in read_f:
            if old in line:
                line=line.replace(old,new)
            write_f.write(line)
    os.remove(filename)
    os.rename(.bak.swap,filename)

modify_file(/Users/jieli/PycharmProjects/爬虫/a.txt,alex,SB)
View Code

3.2 写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数。

技术分享图片
def check_str(msg):
    res={
        num:0,
        string:0,
        space:0,
        other:0,
    }
    for s in msg:
        if s.isdigit():
            res[num]+=1
        elif s.isalpha():
            res[string]+=1
        elif s.isspace():
            res[space]+=1
        else:
            res[other]+=1
    return res

res=check_str(hello name:aSB passowrd:alex3714)
print(res)
View Code

3.3 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

技术分享图片
#
View Code

3.4 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

技术分享图片
def func1(seq):
    if len(seq) > 2:
        seq=seq[0:2]
    return seq
print(func1([1,2,3,4]))
View Code

3.5 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

技术分享图片
def func2(seq):
    return seq[::2]
print(func2([1,2,3,4,5,6,7]))
View Code

3.6 写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}        PS:字典中的value只能是字符串或列表

技术分享图片
def func3(dic):
    d={}
    for k,v in dic.items():
        if len(v) > 2:
            d[k]=v[0:2]
    return d
print(func3({k1:abcdef,k2:[1,2,3,4],k3:(a,b,c)}))
View Code

以上是关于函数的主要内容,如果未能解决你的问题,请参考以下文章

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

在 Visual Studio 中创建构造函数的代码片段或快捷方式

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

web代码片段

C#常用代码片段备忘

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用