Python 深入浅出 - 函数

函数

函数:定义函数,把参数的名字和位置确定下来,函数的接口定义就完成了,对于函数的调用者来说,只需要知道如何传递正确的参数,函数的内部细节被封装起来,调用者无需关心。

定义函数

Python 中,使用 def 语句定义一个函数。依次是 函数名,括号,括号中的参数和冒号,然后,在缩进块中编写函数体,函数的返回值使用 return 语句返回.

注意:函数一旦执行到 return 时,函数就执行完毕,并将结果返回;如果没有 return 语句,函数执行完毕后也会返回结果,只是结果为 None.

例如:

(1) 有 return 语句:

def add(a,b):
    return a + b

print(add(1,2))   

输出结果: 3

(2) 没有 return 语句:

def add_no_return(a,b):
    a+b

print(add_no_return(1,2))

输出结果:None

空函数

空函数什么事都不做,使用 pass 语句。

def nofunc():
    pass
返回多个值

Python 中函数可以返回多个值。

def getValue(x,y):
    return x,y
print(getValue(3,6))

输出结果:(3, 6) ,是 tuple 数据类型

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

上例中,参数 n 即是默认参数,当调用该函数时,没有传递第二个参数时,n 默认就等于 2。

def power(x,n = 2):
    res = 1
    while(n>0):
        res = res * x
        n = n-1
    return res

print(power(3))
print(power(3,2))

输出结果:输出结果一样,都是 9

注意:

  • 必选参数在前,默认参数在后,否则会报错。
  • 当函数有多个参数时,把变化大的参数放在前面,变化小的参数放在后面。变化小的参数就可以作为默认参数。
可变参数

可变参数:就是传入的参数个数是可变的,可以是 1 个,2 个,或任意个。

如何定义:定义可变参数和定义一个 list 或 tuple 参数类似,仅仅是在参数前面多加一个 * 号,在函数内部,其实是接收一个 tuple,所以可以传递任意个参数。

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

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

输出结果:

6

3

可变参数优势:可变参数和 list 或 tuple 参数相比,优势在于在调用函数时,不用事先构造一个 list,tuple 传递进去。

如果已经有一个 list 或 tuple,要调用一个可变参数怎么办?

Python 允许在 list 或 tuple 前面加一个 * 号,把 list 或 tuple的元素变成可变参数传进去。

nums=[2,3,4]
print(calc(*nums))
关键字参数

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


函数高级特性

切片

取出 list 或 tuple 中部分元素,Python 提供了非常方便的方法。

常规方法 - while 循环:

arr=["java",True,11,22.11]
res = []
n = 3;
for i in range(n):
    res.append(arr[i])

print(res)

Python 提供的切片操作符:

print(arr[0:3])

arrp[0:3] 表示,从索引 0 开始取,直到索引 3 为止,但不包括索引 3,即索引 0,1,2.一共 3 个元素(如果第一个索引是 0 ,则可以省略)。

当然,也可以是任意索引位置开始。

print(arr[1:2])

倒数切片:
倒数第一个元素的索引是 -1,取出后 2 个元素。

print(arr[-3:-1])

什么都不写,只写 [:] 就可以原样复制一个 list:

print(arr[:])

字符串切片
字符串 ‘abcdef’ 也可以看成是一种 list,每一个元素就是一个字符,因此,字符串也可以使用切片操作。操作的结果仍是字符串。

print("abcdef"[:3])

迭代

Python 中的迭代比 C,Java 中的迭代更加强大,即使迭代的数据类型没有下标的,只要是可迭代对象,都可以迭代。

例如:迭代出 dict 中的 key,value 值(dict 不是按照 list 的方式顺序排列,所以,迭代出来的结果顺序可能不一样):

迭代 dict :
op_map = {"Android":"Google","iOS":"Apple"}
for op_key in op_map:
    print(op_key)

输出结果:

Android

iOS

默认情况下,迭代 dict,迭代的是 key 值,要想迭代出 value 值,需要使用 for value in dict.values()

op_map = {"Android":"Google","iOS":"Apple"}
for op_value in op_map.values():
    print(op_value)

输出结果:

Google

Apple

同时迭代 key ,value

op_map = {"Android":"Google","iOS":"Apple"}
for op_key,op_value in op_map.items():
    print("key = " + op_key + ",value = " + op_value)

输出结果:

key = Android,value = Google

key = iOS,value = Apple

迭代字符串 :
for ch in "abc":
    print(ch)

通过 collections 模块的 Iterable 类型判断,是否是可迭代类型

from collections import Iterable
print(isinstance("abc",Iterable))  # True
print(isinstance(123,Iterable))  # False
print(isinstance([1,2,3],Iterable)) # True

list 下表循环:

for i,ch in enumerate(["a","b","c"]):
    print(i,ch)

输出结果:

0 a

1 b

2 c

列表生成式
li = list(range(1,10))
print(li)

输出结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9],可以看出,range(a,b) 是不包括 b的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值