python函数详细了解

一、函数的参数

函数的参数就是函数名后英文括号里包含的内容

# 0 个参数

def make_juice():

  print('将猕猴桃去皮')

  print('将猕猴桃切块')

  print('将切碎的猕猴桃放进榨汁机')

  print('将果汁倒进杯子中')

  print('制作完成!')

# 1 个参数

def make_juice(fruit):

  # 把 fruit 写进函数体中

  print('将' + fruit + '去皮')

  print('将' + fruit + '切块')

  print('将切碎的' + fruit + '放进榨汁机')

  print('将果汁倒进杯子中')

  print('制作完成!')

参数也可以是多个。如果有多个参数,每个参数用英文逗号隔开

print('妮妮', '小新', '正男')

二、参数的类型

  • 位置参数
  • 关键字参数
def record(name, age, height, weight):

  print('欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')

# 下面开始调用定义的函数,传入关键信息。

record('野原新之助', 5, 110, 22)

record('风间彻', 5, 112, 21)

# 输出:

# 欢迎小朋友们!

# 姓名: 野原新之助

# 年龄: 5

# 身高: 110 cm

# 体重: 22 kg

# 欢迎小朋友们!

# 姓名: 风间彻

# 年龄: 5

# 身高: 112 cm

# 体重: 21 kg

调用函数时,就用到了 位置参数,按位置,依次传入了 nameageheightweight 四个参数纪录小新和风间的信息。

一次记录小新的信息,name 的值为 '野原新之助'age 的值为 5height 的值为 110weight 的值为 22

第二次记录风间的信息,name 为 '风间彻'age 为 5height 为 112weight 为 21

三、关键字参数

在调用函数时按照 参数名 = 值 的格式传入了参数,这种参数就叫作 关键字参数

def record(name, age, height, weight):

  print('欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')

record(age=5, weight=21, name='佐藤正男', height=109)

# 输出:

# 欢迎小朋友们!

# 姓名: 佐藤正男

# 年龄: 5

# 身高: 109 cm

# 体重: 21 kg

注意:位置参数可以和关键字参数一起使用,但要保证所有位置参数都在关键字参数前,Python 在解析参数时,是优先考虑 位置参数 的

def record(name, age, height, weight):

  print('欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')


record('佐藤正男', 5, height=109, 21)

# 报错:SyntaxError: positional argument follows keyword argument (语法错误:位置参数被放到关键字参数后面了)

下面代码才是可行的

def record(name, age, height, weight):

  print('欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')

# 位置参数放到所有关键字参数前面

record('佐藤正男', age=5, height=109, weight=21)

四、默认参数

 我们可以在定义函数时,设置年龄默认为 5

def record(name, height, weight, age=5):

  print('欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')

# 调用函数时,遇到 5 岁的小朋友,可以不输入年龄

record('阿呆', 115, 25)

# 输出:

# 欢迎小朋友们!

# 姓名: 阿呆

# 年龄 5

# 身高 115 cm

# 体重 25 kg

# 输入妮妮的信息时,要在最后填上她的年龄

record('樱田妮妮', 105, 18, 4)

# 输出:

# 欢迎小朋友们!

# 姓名: 樱田妮妮

# 年龄: 4

# 身高: 105 cm

# 体重: 18 kg

我们在定义 age 的默认值时,将 age 移到了参数的最后的位置。这是因为,默认参数的要求是一定要放在非默认参数的后面,否则程序会出现错误

def record(name, age=5, height, weight):

  print('欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')

# 报错:SyntaxError: non-default argument follows default argument(语法错误:非默认参数被放到默认参数后面了。)

六、函数的多个返回值

和函数的参数一样,函数也支持 0 到多个返回值。

多个返回值也和多参数一样,放在关键词 return 后面并列,然后用英文逗号隔开。

def new_kids(kid1, kid2, kid3, kid4):

  # 多个值在 return 后并列,用英文逗号间隔开

  return kid1, kid2, kid3, kid4

print(new_kids('野原新之助', '风间彻', '佐藤正男', '樱田妮妮'))

# 输出:('野原新之助', '风间彻', '佐藤正男', '樱田妮妮')

文括号包裹,里面用英文逗号分隔开的是元组——Python 中的一种基本数据类型

七、函数的变量作用域

在 Python 中变量分为两种: 全局变量 和 局部变量

全局变量 在当前写的代码中一直起作用。全局变量 有效的范围,叫作 全局作用域

局部变量 只在一定范围内有效,在范围外就无效了

如公交卡:

 加入幼儿园信息

school = '双叶幼儿园'

def record(name, weight, height, age=5):

  # 函数内部加入班级信息

  class_name = '向日葵班'

  print(school + class_name + '欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')


record('野原新之助', 22, 110)

# 输出:

# 双叶幼儿园向日葵班欢迎小朋友们!

# 姓名: 野原新之助

# 年龄: 5

# 身高: 110 cm

# 体重: 22 kg



# 到此为止,吉永老师很满意,然后她要介绍自己了。

print('我是' + school + class_name + '的吉永绿老师,大家多多指教!')

NameError: name 'class_name' is not defined(命名错误:class_name 名称没有被定义)

更改:

(1)变成全局变量

school = '双叶幼儿园' # 全局变量

class_name = '向日葵班' # 全局变量



def record(name, weight, height, age=5):

  print(school + class_name + '欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')



# school 和 class_name 可以正常访问

print('我是' + school + class_name + '的吉永绿老师,大家多多指教!')

# 输出:我是双叶幼儿园向日葵班的吉永绿老师,大家多多指教!

(2)只需要在函数内部局部变量前加上 global 关键字,把局部变量强制变成全局变量

school = '双叶幼儿园'



def record(name, weight, height, age=5):

  global class_name # 表示 class_name 强制变成全局变量

  class_name = '向日葵班'

  print(school + class_name + '欢迎小朋友们!')

  print('姓名:', name)

  print('年龄:', age)

  print('身高:', height, 'cm')

  print('体重:', weight, 'kg')



record('野原新之助', 22, 110)

print('我是' + school + class_name + '的吉永绿老师,大家多多指教!')

# 输出:我是双叶幼儿园向日葵班的吉永绿老师,大家多多指教!

如果局部变量和全局变量名称相同,那函数内部会优先访问局部变量,外部只会访问全局变量

总结:

函数的 参数 个数支持从 0 到多个,传入多个参数的方式分为 位置参数 和 关键字参数,请记住:位置参数要放在所有关键字参数之前。除此之外,我们还学习了 默认参数,在定义参数时默认参数一定要放在位置参数后。

函数中用 return 可以有多个返回值,需要注意的是,每个返回值要用 英文逗号 隔开。

最后我们重点学习了 函数的变量作用域,需要注意的是,如果局部变量与全局变量名称相同,函数内会优先访问局部变量。

那么,在什么情况下要在函数内加 global,老师帮你总结一下:

  1. 在函数外想要使用函数内的变量(全局作用域使用局部变量)。如果不加 global,则无法在函数外访问函数内的变量。
  2. 在函数内修改函数外的变量(局部作用域修改全局变量)。如果不加 global,只是在函数内定义了和全局变量同名的变量,两者井水不犯河水。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值