python可以像c++一样,可以直接定义函数。具体格式如下:

def(关键字) 函数名(形参01,形参02...):
    do_something...

    #如果有返回值,则调用以下语句
    return 返回值

函数定义注意:

1)函数定义的关键字“def”。

2)函数的形参可以为空,也可以有具体参数。

3)函数的实参有“位置实参”和“关键字实参”两种方式。

函数示例:

#函数定义
def greet_user():
    print("显示问候语hello")

#函数调用
greet_user()

#输出结果
显示问候语hello


def greet_user01(username, age):
    print("hello " + username + ", AGE: " + str(age))

#位置实参
greet_user01("Jobs", 22)

#关键字实参,参数先后位置不固定,根据标识名来确定
greet_user01(age="21", username="Odin")

#位置实参输出结果
hello Jobs, AGE: 22
#关键字实参输出结果
hello Odin, AGE: 21

注意事项:

1)列表传给函数,在函数中对列表的所有修改都是永久的

def change01(indexs):
    i = indexs[0]
    indexs[0] = indexs[1]
    indexs[1] = i


inputs = [100, 222]
print(inputs)

change01(inputs)

print(inputs)


#输出结果,通过函数将列表的两个元素交换
[100, 222]
[222, 100]

2)与java一样,传入两个元素,在函数内进行交换,结果只会在函数体内生效,而不会对原变量进行交换,类似于java的“引用传递”:

i = 100
j = 200
#原变量打印
print(i)
print(j)
print()

#交换变量值
def change(index0, index1):
    index = index0
    index0 = index1
    index1 = index
#    counts = [index0, index1]

    print("函数内交换变量值:")
    print(index0)
    print(index1)
    print()

#    return counts

#indexs = change(i, j)
change(i, j)

#打印函数外变量,检查是否交换
print(i)
print(j)



#输出结果
100
200

函数内交换变量值:
200
100

100
200

 3)函数的默认值

# 默认参数只能在函数参数的右边,如下例
def shorten(text, length = 25, indicator = '...'):
    # 字符串超过默认长度
    if len(text) > length:
        # 截取字符串,并将字符串返回缩减版
        text = text[: length - len(indicator)] + indicator
    
    print(text)

结果如下:

# 调用方法
shorten('the road')
shorten(length= 7, text = 'the road')
shorten('the road', 7, indicator = '&')

# 执行结果
the road
the ...
the ro&

5)函数参数的默认值为列表等可变的变量时,应注意!!!

当函数给定默认值时,实际上执行def语句的时候创建(也就是说,在创建该函数的时候创建默认值),而不是在调用该函数时创建的。如果默认参数为列表,则在创建该函数时创建列表,后面再调用时都不会创建默认列表,所有说每次调用时都是同一个默认列表。

例如:

def append_if_even(index, lst = ['1', 0b100101, 'wode', 'qwz185']):
    """
    将index索引处的列表内容修改为OKOKOK
    :param index: 索引
    :param lst: 列表
    """
    lst[index] = 'OKOKOK'
    print(lst)


append_if_even(1)
append_if_even(2)

运行结果如下:

['1', 'OKOKOK', 'wode', 'qwz185']
['1', 'OKOKOK', 'OKOKOK', 'qwz185']