函数:定义函数以及函数参数

这次主要是整理一下函数以及函数的各种类型的参数(这次的重点在于函数参数)

一、函数的例子:

#!/usr/bin/env python
# -*- coding=utf-8 -*-


# 函数定义 使用def语句 后边跟着函数名称 以及函数所需参数
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TyprError('bad operand type')
    if x >= 0:
        # 当函数执行到return之后不会再去往下执行,如果没有return的函数默认返回none
        return x
    else:
        return -x


“”“
上述定义了一个求绝对值的函数
”“”

二、函数参数:(函数参数包含【必须参数】【默认参数】【可变参数】【关键字参数】)

2.1 必选参数

#!/usr/bin/env python2.7
# -*- coding=utf-8 -*-


def power(x):
    return x*x

"""
我们定义了一个求x平方的函数,其中这里的x就是我们的必传递的参数
那我们这里假设不传递这个参数会发生什么呢?我们来调用看下
"""

print(power())

# >>> TypeError: power() takes exactly 1 argument (0 given) 这里的意思是power函数需要一个参数,你给了0个

2.2 默认参数

#!/usr/bin/env python2.7
# -*- coding=utf-8 -*-


根据上边必选参数举出来的例子,我们这个时候想要计算x的3次方怎么办?4次方?5次方?

def power(x):
    return x*x*x

我们不能这样做吧,如果这样做,每次都需要定一个新的函数,这样就违背了我们使用函数的初衷,那我们可以给对应的函数多传递一个参数作为需要计算的次方数

def power(x, n):
    return x**n

print(power(3))
# 使用之前调用的方式 >>> TypeError: power() takes exactly 2 arguments (1 given) 需要两个参数但是给了一个

这个时候我们就可以直接引出我们的默认参数来了

def power(x, n = 2):
    return x ** n

print(power(2)) # >> 4
print(power(2,3)) # >> 8



# [注意1:必选参数和非必选参数(默认参数)位置不能颠倒]
def power(n=2,x):
    return x**n

print(power(3)) 

这个地方就是错误的,因为这个时候会造成歧义,这里的3到底是给默认参数的还是给必选参数的,python会直接给这个代码报错 non-default argument follows default argument



#[注意2: 默认参数不能是可变对象,因为多次调用之后结果会与你想象的不一样]
def add_end(L=[]):
    L.append('END')
    return L


add_end() # ['END']
add_end() # ['END','END']

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。所以,定义默认参数要牢记一点:默认参数必须指向不变对象!

默认参数如果是可变对象的话,这个时候不传递参数,一直指向的是初始化定义的那个地址,
参考:https://www.cnblogs.com/python960410445/p/11979585.html


2.3 可变参数

可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。


def calc(numbers):
    sum = 0
    for i in numbers:
        sum += i
    return sum


这个时候可以这样调用:
calc([1,2,3,4]) or calc((1,2,3,4))


如果我们将calc的参数写成可变参数的样式

def calc(*number):
    pass

这个时候我们可以这样调用:
calc(1,2,3,4,5) 就不用外加中括号或者圆括号了


当然假设提前给好的list我们也可以这样调用
nums = [1, 2, 3]
calc(*nums)

2.4 关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

def person(name, age, **kw):
    print 'name:', name, 'age:', age, 'other:', kw

person('Michael', 30)
# >>> name: Michael age: 30 other: {}

person('Bob', 35, city='Beijing')
# >>> name: Bob age: 35 other: {'city': 'Beijing'}
person('Adam', 45, gender='M', job='Engineer')
# >>> name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

2.5 组合使用

def func(a, b, c=0, *args, **kw):
    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw

参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

本节内容主要参考:廖雪峰-python

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值