【Python学习】函数

(一)调用函数

Python内置了许多有用的函数,可直接调用,可查看官方文档:
Python官方函数文档
可在交互式命令行通过命令[help(abs)]查看[abs]函数的帮助信息。

# 调用函数
# 求绝对值
num1 = -10
print(abs(num1))
# 求最大、小值
nums = [1,2,3,4,5,32,21,23,12]
print(max(nums),min(nums))

(1)数据类型转换:
内置的常用函数包括了数据类型转换函数:

>>> int('123')
123
>>> str(123)
'123'
>>> float('12.21')
12.21

(二)定义函数

(1)定义函数:
使用【def】语句,依次函数名、括号、参数和冒号,在缩进块中写函数体,返回值用【return】返回

# 定义函数返回绝对值
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

print(my_abs(-10))

(2)空函数:
定义一个什么事也不做的空函数

def noneFun():
	pass

(3)参数检查:
调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError

# 参数类型做检查
def my_abs_check(x):
    if not isinstance(x,(int,float)):
        raise TypeError('错误类型')
    if x >= 0:
        return x
    else:
        return -x
print(my_abs_check('-1'))

TypeError: 错误类型

(4)返回多个值:
函数可以同时返回多个值,但其实就是一个tuple
定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2+bx+c=0的两个解

# 一元二次方程的求根
import math
def quadratic(a,b,c):
    d = b ** 2 - 4 * a * c
    if a == 0 or d < 0:
        raise TypeError('无解')
    else:
        x1 = (-b + math.sqrt(d)) / (2 * a)
        x2 = (-b - math.sqrt(d)) / (2 * a)
        return x1, x2

print(quadratic(2,3,1))

(三)函数的参数

(1)位置参数:
power(x, n)函数有两个参数:x和n,这两个参数都是位置参数

# x^2
def power1(x):
    return x * x
# x^n
def power2(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

print(power2(2,3))

(2)默认函数:
调用power(5)时,相当于调用power(5, 2)

# 默认参数
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

print(power(2))

默认参数降低了函数调用的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现
默认参数必须指向不变对象

(3)可变参数:
可变参数就是传入的参数个数是可变的,定义可变参数和定义一个list或tuple参数相比,仅在参数前面加了一个*号。
例子:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……:

# 可变参数
def calc(*numbers):
    sum = 0
    for b in numbers:
        sum = sum + b * b
    return sum

print(calc(1,2,3,4))

# *nums表示把nums这个list的所有元素作为可变参数传进去
nums = [2,4,6]
print(calc(*nums))

(4)关键字参数:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。可以扩展函数的功能。

# 关键字参数
def person(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)

person('luna',14,city='anshun')
person('alice',12,gender='M',job='teacher')

infos = {'city':'guiyang','job':'teacher'}
person('momo',21,**infos)

【**infos】 表示把infos 这个dict的所有key-value用关键字参数传入到函数的【**kw】参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。

(5)命名关键字参数:
限制关键字参数的名字,就可以用命名关键字参数,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

def person1(name,age,*,city,job):
	print(name,age,city,job)

person1('luna',11,gender='M',city='anshun',job='IT')

(6)参数组合:
Python中定义函数,可用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可组合使用。
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
任意函数,都可以通过类似func(*args, **kw)的形式调用它。

【*args】是可变参数,args接收的是一个tuple;
【**kw】是关键字参数,kw接收的是一个dict。

def all_fun(a,b,c=0,*args,**kw):
    print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)
def all_fun1(a,b,c=0,*,d,**kw):
    print('a=',a,'b=',b,'c=',c,'d=',d,'kw=',kw)

args = (1,2,3)
kw = {'d':99,'x':'%'}
all_fun(*args,**kw)
all_fun1(*args,**kw)

可变参数既可以直接传入:func(1, 2, 3),又可以先组装listtuple,再通过*args传入:func(*(1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

(四)递归函数

函数在内部调用自身本身,这个函数就是递归函数。
计算阶乘:

def fact(n):
    if n == 1:
        return 1
    return n * fact(n - 1)

print(fact(3))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值