Python 中的函数

函数是用户可以进行自定义,函数的结构为:

         def 函数名([变量1,变量2,变量3,....变量n]):

                        '''函数文档注释'''

                          函数体       

函数定义需要注意以下几点:

•        函数定义以 def 关键词开头,后面接上函数名称和圆括号 ();

•        传入参数须放在圆括号之内,不同的参数用逗号隔开。即使一个参数也没有,这对圆括号也必须保留;参数是变量,会在函数体中用到它,目的在于提高函数的灵活性和可复用性。

•        函数的第一行语句可以选择性地使用注释文字,用于存放函数功能和使用说明;

•        函数体是以冒号起始的一个缩进统一的代码块,负责函数具体内容的执行;

•        return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。若有多个返回值时,则返回值之间必须用逗号分隔,调用时要有多个变量来接收返回值。定义函数需要做到下面几点:函数创建后并不会执行,必须在程序中调用该函数才会执行。

形参和实参:

        如果函数有返回值,可以使用变量来存储返回值,在函数的返回值对于调用不重要时可以忽略,即不使用变量存储函数返回值。函数定义时的参数称为形参,函数调用时的参数称为实参。

def function(n):# 此时这个n就是形参
    sum = 0
    for i in range(1,n):#for循环计算从1到n-1的和
        sum += i
    return sum  #sum为1到n-1相加的值   

x = 100        #x为实参
result = function(x)#向函数中传入100,函数计算1到99的值
print(result)#print #输出1到99相加的和

        当实参类型是可变类型时,那么函数体修改形参的内容会影响到函数外作为实参的值;

        而当实参类型是不可变类型时,那么函数体修改形参的值不会影响到函数外作为实参的值。        

        所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变;

        可变数据类型的值改变,id值不变;不可变数据类型的值改变,id值随之改变。

        目前我所知道的内置可变类型有:列表、集合、字典

                                 内置不可变类型有:数值、字符串、元组、布尔、None类型

参数传递:

(1)位置传递:

  定义阶段:用位置参数定义函数,比如

def add_fun(x,y):#x,y就是位置参数 
    return x +y


测试阶段:传入和函数定义时数量和顺序一致的参数,位置传递通过实参的位置给形参赋值

add_fun(100, 20)

(2)关键字传递:

定义阶段,与位置参数一样,使用形参定义。

def sub_fun(x,y):
     retun x -y

调用阶段,使用定义时的形参作为关键词并赋予其相应的值组成关键字参数,比如

sub_fun(y = 20,x = 100)#关键字传递是根据每个参数的名字进行参数传递的,关键字可以不遵守位置的对应关系
sub_fun(x = 300,y = 100)
sub_fun(6,y = 4)#关键字传递可以和位置传递混用,但位置参数要出现在关键字参数之前

(3)参数默认值:

        定义阶段,参数被预先赋予相应的默认值,称这个参数是默认参数。(注意,定义时默认参数的值的类型必须是不可变类型的,否则会带来很多大家现阶段很难理解的麻烦。)

def pow_fun(x,y = 2) 
    return x**y

        调用阶段,可以对有默认值的参数重新赋值,也可以不赋值而使用默认的值。

pow_fun(8)
pow_fun(8, 3)

(4)包裹传递(包裹位置传递、包裹关键字传递):

        在定义函数阶段,有时候并不知道调用的时候会传递多少个参数。这时候,包裹位置参数或者包裹关键字参数,来进行参数传递,会非常有用。

包裹位置参数:

        定义阶段,参数的前加*代表使用包裹位置传递

def sum_fun(*numbers):
    print(numbers)#查看numbers,一会儿会看到它是一个元组 
    sum = 0
    for e in numbers: 
        sum +=e 
    return sum

        在调用时参数可以有0到多个,比如:

sum_fun(1,2,3)
sum_fun(1,2,3,4,5,6)

包裹关键字传递定义阶段,

        参数前加**表示使用的是包裹关键字参数  

def func(**data): 
    print(data)

        调用阶段,将所有的参数名和数值以key=value的形式传递,双星号后面的参数会收集打包所有的关键字参数,传递给函数,比如

func(x=100,y = 200,z=300)

执行,能看到打印的data是一个字典。

以上就是我对部分函数的理解,如有不对,请指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值