python -- 函数

一、函数概述

函数是一组已经定义好的,可以重复使用的代码,通过一个函数名封装起来,要想执行这个函数,只需要调用函数名即可

定义函数的语法:

def 函数名([参数列表]):

  语句块

  【return [表达式]】

多个参数之间用逗号间隔,默认情况下,参数值和参数名称是按照函数声明去定义的顺序进行匹配的。

如果return后面是空的,或者没有return语句,都会返回None,表示没有返回值

定义个函数后,可以在另一个函数中调用执行,也可以在python控制台中执行

# -----------------------------------------
# 函数:一组定义好的,可以重复使用的代码。
# -----------------------------------------
# 定义一个简单的函数,没有参数,也没有返回值
def hello():
print("Hello python!")


# 传入一个参数
def welcome(name):
print("Welcome, %s !" % name)


# 传入参数列表,并返回一个值
# width, height称为形参
def area(width, height):
return width * height


w = 20
h = 30
# w, h称为实参
rect_area = area(w, h)
print("rect_area:", rect_area)


# 可以返回多个值
def return_xy(arg1, arg2):
return arg1, arg2


a, b = return_xy(20, 30)
print(a, b)


# 返回None
def print_str(str_to_print):
print(str_to_print)
return


# 通过判断语句决定要返回哪个值
def get_level(score):
if score >= 80:
return 'A'
elif score >= 60:
return 'B'
else:
return 'C'


print("等级为:", get_level(75))


# 录入成绩,并且打印出相应的等级(函数的嵌套)
def input_score():
my_score = int(input("请输入成绩:"))
level = get_level(my_score)
print("分数:{} 等级:{}".format(my_score, level))


# 不可变对象(数字、字符串、元组)
a = 5
print(id(a))
a = 10 #更新变量值,抛弃之前的变量
print(id(a))

# 可变对象(列表、字典、集合)
b = [1, 2, 3]
print(id(b)) #打印出的id都是一样的
b[1] = 10
print(id(b))


def add_one(x):
x += 1
print("函数内的值:", x)


# 给函数传递一个不可变对象
y = 5
add_one(y)
print("函数外的值:", y)


def reorder(score_list):
score_list.sort()
print("函数内的值:", score_list)


# 给函数传递一个可变对象
scores = [98, 90, 76, 89, 85]
reorder(scores)
print("函数外的值:", scores)


二、参数
调用函数时可以使用的参数类型有:
A、必须参数:调用函数时必须以正确的顺序传入函数
B、关键字参数:通过参数值来匹配参数值,,顺序可与声明时不一致
C、默认参数:给参数设置一个默认值,如果没有传递对应的参数值,则使用默认的参数值
D、不定长参数:参数个数不确定,以元组或字典的形式导入未知的变量参数

不同的参数类型可以混合使用,但参数定义的顺序必须是:必需参数、默认参数、可变参数和关键字参数

# 定义了一个必需参数和两个默认参数
def print_info(name, age=12, school='明德'):
print("姓名:{} 年龄:{} 学校:{}".format(name, age, school))


print_info('李佳欣')
print_info('李佳欣', 15)
print_info('李佳欣', 15, '执信')
print_info('李佳欣', school='二中')
print_info(age=13, name='张宇')


# 定义不定长参数
# 加了一个星号的参数(以元组的形式导入)
def print_list(group, *members):
print("小组:{}\n成员:{}".format(group, members))


print_list('成长组', '张磊', '李静', '陈晓', '肖亮')


# 加了两个星号的参数(以字典的形式导入)
def print_dict(name, **infos):
print("姓名:{}\n信息:{}".format(name, infos))


print_dict('张雨婷', sex='女', age=12, grade='初一')


三、匿名函数
可以使用lambda来创建匿名函数:
  lambda【arg1[,arg2....argn]】:表达式
lambda只是一个表达式,而不是代码块,函数体比较简单,可以用来实现简单的逻辑。
lambda函数拥有自己的命令空间,只能访问它自己的参数列表,不能访问全局命令空间里的参数
PEP 8命令规范并不推荐使用匿名函数,仍然建议用def定义函数。

# 匿名函数
# lambda [arg1 [,arg2,.....argn]]:expression
sumfun = lambda arg1, arg2: arg1 + arg2


print("两数之和为:", sumfun(100, 200))


四、全局变量&局部变量
A、变量的访问权限决定于这个变量在哪里赋值。
B、根据作用域的不同,变量分为全局变量和局部变量。
C、在函数之外定义的变量属于全局变量,可以在函数内部使用全局变量。
D、在函数中定义的变量,是局部变量,只能在声明它的函数中进行访问,在外部不能访问。
当函数中定义的变量名称与全局变量名称相同时,函数内定义的变量不会改变全局变量的值。
如果要在函数内改变全局变量的值,就必须使用global关键字。

def reorder1():
# 在函数内部使用全局变量
scores1.sort()
print("函数内的值:", scores1)


# 全局变量
scores1 = [98, 90, 76, 89, 85]
reorder1(scores1)
print("函数外的值:", scores1) #由于列表是可变对象,则打印出数据跟随变化


# 如果要在函数内改变全局变量的值,必须使用global关键字
def double():
global g
g = g * 2
print("函数内的值:", g)


g = 5
double()
print("函数外的值:", g)
posted @ 2019-07-20 14:59  Test挖掘者  阅读(326)  评论(0编辑  收藏  举报