python入门之函数调用第二关_Python基础语法学习笔记之风变第九关函数

一、初识函数

1、函数的作用

2、函数的组成

函数(Function)能实现的功能从简单到复杂,各式各样,但其本质是相通的,我们可以看作成三个部分。

3、定义和调用函数

def math(x):

y = 3*x + 5

return y

第1行:def的意思是定义(define),math是【函数名】(自己取的),再搭配一个英文括号和冒号,括号里面的x是参数(参数名也是自己取)。

第2行:def下一行开始缩进的代码就是函数要实现的功能,也叫【函数体】。这里的功能就是:根据x计算出一个值y。

第3行:return语句是返回的意思,可以指定函数执行完毕后最终会返回什么值或表达式,否则计算机是无法判断出函数最终要输出什么结果的。

# 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合

# 2. 不可与内置函数重名(内置函数不需要定义即可直接使用)

def math(x):

# 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同

# 规范:括号是英文括号,后面的冒号不能丢

y = 3*x + 5

# 函数体:函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格

return y

# return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略

二、函数的进阶使用

1、参数类型

深夜食堂营业记!深夜食堂,开张!

#直接运行代码即可

def opening():

print('总有一种味道能温暖你~')

print('深夜食堂正式开业啦!')

print('欢迎来自五湖四海的你前来品尝!')

opening()

这里定义了一个opening()函数,但是括号里没有带参数,原因是这个函数的功能是打印出固定的三句话,不需要参数的参与。

在开业初期,为了吸引人流,你采取的策略是顾客可以任意点菜。但因为人手不足,所以只能为每个人提供一份开胃菜和一份主食。如果写成函数的形式,这个函数就会有两个参数。

用appetizer和course来表示开胃菜和主食~ 直接运行下面的代码就好。

def menu(appetizer, course): #注意,此处有了两个参数,分别表示开胃菜和主食

print('一份开胃菜:' + appetizer)

print('一份主食:' + course)

menu('话梅花生','牛肉拉面')

这里的'话梅花生'和'牛肉拉面'是对应参数的位置顺序传递的,所以appetizer和course被叫作【位置参数】(注意位置参数的概念),当有多个参数的时候,我们就必须按照顺序和数量传递,这也是最常见的参数类型。

二、函数的进阶使用

1、参数类型

def menu(appetizer, course):

print('一份开胃菜:' + appetizer)

print('一份主食:' + course + '\n')

#还记得转义字符\n吧,表示换行

menu('牛肉拉面','话梅花生')

menu('话梅花生','牛肉拉面')

#如果采用下面这种形式传递,就不需要理会参数位置

menu(course = '牛肉拉面', appetizer = '话梅花生')

在这个例子里,也不需要return语句,原因是这个函数直接在屏幕打印出内容,不需要返回值。事实上,没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值。

【不定长参数】:即传递给参数的数量是可选的、不确定的。

它的格式比较特殊,是一个星号*加上参数名,它的返回值也比较特殊,我们来看看下面的例子。

('烤鸡翅', '烤茄子', '烤玉米'),我们用type()函数可以知道这种数据类型叫作元组(tuple).

元组的写法是将数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改。

我们最熟悉的print()函数,它完整的参数其实是长这样的:

print(*objects, sep = ' ', end = '\n', file = sys.stdout, flush = False)

可以看到第一个参数objects带了*号,为不定长参数——这也是为什么print()函数可以传递任意数量的参数。其余四个为默认参数,我们可以通过修改默认值来改变参数,对比一下下列代码的输出结果。

print('金枪鱼', '三文鱼', '鲷鱼')

print('金枪鱼', '三文鱼', '鲷鱼', sep = '+')

# sep控制多个值之间的分隔符,默认是空格

print('金枪鱼', '三文鱼', '鲷鱼', sep = '+', end = '=?')

# end控制打印结果的结尾,默认是换行)

2、返回多个值

函数,不仅可以支持输入多个参数,而且也可以同时输出多个值。

import random

#引入random模块

appetizer = ['话梅花生','拍黄瓜','凉拌三丝']

def coupon(money):

if money < 5:

a = random.choice(appetizer)

return a

elif 5 <= money < 10:

b = random.choice (appetizer)

return b, '溏心蛋'

print(coupon(3))

print(coupon(6))

可以看到:要返回多个值,只需将返回的值写在return语句后面,用英文逗号隔开即可。

元组和列表一样,可以通过索引来提取当中的某个元素。

另外一种方式:我们也可以同时定义多个变量,来接收元组中的多个元素(看最后四行代码,直接运行即可):

三、多个函数间的配合

当多个函数同时运行时,就涉及函数中一个非常重要的概念 —— 变量作用域。

1、变量作用域

程序中的变量并不是在哪个位置都可以被使用的,使用权限决定于这个变量是在哪里赋值的。关于这个概念,目前我们只需要掌握下面两点即可:

第一点:一个在函数内部赋值的变量仅能在该函数内部使用(局部作用域),它们被称作【局部变量】,如cost()函数里的variable_cost。

第二点:在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),它们被称作【全局变量】,如第一行的rent。

那要怎么解决“局部变量”和”全局变量“之间的矛盾呢?

第一种方法最取巧:把局部变量都放在函数外,变成全局变量。

第二种方法:利用global语句,它可以将局部变量声明为全局变量

global语句一般写在函数体的第一行,它会告诉Python,“我希望variable_cost是个全局变量,所以请不要用这个名字创建一个局部变量”。所以sum_cost()函数内部现在可以直接使用声明后的全局变量variable_cost。

2、函数的嵌套

函数的嵌套我们并不陌生,最简单的例子就是print(len('我和你')),这里就是print()嵌套了len(),Python会先执行len()函数,得到一个返回值,再由print()打印出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值