当前位置:文档之家› 第十三课人生苦短我用Python语法简单才会越来越被编程界欢迎

第十三课人生苦短我用Python语法简单才会越来越被编程界欢迎

第十三课人生苦短我用Python语法简单才会越来越被编程界欢迎
第十三课人生苦短我用Python语法简单才会越来越被编程界欢迎

第十三课人生苦短我用Python语法简单才会越来越被编程界欢迎初始函数

1.1 函数的作用

;1.2函数的组成

1.3定义和调用函数

函数的进阶使用

2.1函数类型

2.2返回多个值

多函数协作

3.1变量作用域

3.2函数嵌

/\e这两节课的主要内容是带大家探究“熟悉的陌生人”——函数。之所以这么说,是因

为我们之前已经接触过Python函数,但是对它没有系统地了解过。这节课,我们一起经营KFC,在我们KFC门店里通过运用函数解决我们的问题。首先在学习具体知识前,我向大家简

要的介绍下函数的作用,知道函数是做什么用的?

1 函数的作用

人生苦短,我用Python”,正因为Python语法简单,才会越来越被编程界欢迎。换言之,我们编程,更应该避免重复性代码。前面学习的循环是减少代码重复的一种手段,那么接下来要学习的函数也是减少重复性代码的另一种手段。它的定义是:

什么意思呢?我们之前写的代码只能执行一次,但是函数中的代码可以使用多次。通俗来讲,函数就如同一个包裹,每个包裹都有一个功能,无论你在哪儿,只要你需要包裹,就把它拿过去用;你需要什么样功能的包裹,就用什么样的包裹;你需要使用多少次包裹,就使用多少次。这就是函数,在之后的旅程中,你会越来越体会到函数的妙用。讲了这么多了,先看一下函数长什么样子?

1.2函数的组成

先不着急看Python的函数,先来个数学函数,那些年,我们错过的函数。数学函数y = 6*x +9 , x是自变量,6*x+9是执行过程,y是因变量,自变量x决定了因变量y得值。那么,你可以将y = 6*x +9看作成3部分

在Python中,我们遇到很多函数,有负责输入数据的函数,有负责数据处理的函数,有负责数据输出的函数。

以上就是我们见过的Python的函数,这些函数是Python自带的函数,我们不需要管这些函数怎么来的,就负责用就好了,这些函数也叫内置函数。你会发现,上面这些函数,都有括号(),里面存放我们需要传给函数的数据,在Python江湖中,这种数据称为【函数的参数】。【参数】指的是函数要接受、处理的数据,其实就是一个变量。

好了,我们看过了函数的样子。但是问题来了,这些函数很好,如果用不到他们怎么办。就像我们KFC餐厅里,顾客不想吃汉堡怎么办?我们可以给他们做卤肉饭啊,同样,我们也可以根据自己的需要,定义自己想要的函数。大家进入本节课重点:定义和调用函数。编写函数第一步,我们先来看一下如何定义一个函数,它的基本语法是什么。

+3定义和调用函数

函数三部分,第一部分输入,在y = 6*x+9函数中,因为x变,y才改变,x就是输入到函数的数据,就是这个函数的参数;第二部分,执行过程,执行过程就是计算y的结果,即6*x+9的结果;还有第三部分,输出结果,计算完这个结果后要把这个结果告诉别人。因此,这个函数可以写成下面这个样子。

拆分解读:第一行:def的全称是define, 译为定义;fun是函数名字,自己起的;(x)这里是函数的参数,参数名字也是自己起;不要忘了最后的冒号:

江湖秘籍:涉及到的符号都是英文的哦。第二行:def下一行缩进的内容叫做函数体,这是函数要实现的功能。即根据x的值,计算6*x+9,将结果赋值给y。第三行:return 语句是返回的意思,可以指定函数执行完毕后最终会得到什么样的结果,否则计算机是无法判断出函数最终要输出什么结果的。定义函数是不是很简单?但是里面还有很多注意事项,不要踩坑。

#函数名:1.名字能体现函数的功能,一般用小写英文字母和数字、英文下划线组合使用

现在,你根据上面的例子,完成函数y=30+11*x,请在下面代码框中编写,点击运行。

你会发现,终端内没有任何内容。没有内容就对了,现在只是定义了函数,还没有使用函数。定义函数,就是将函数内部功能封装好,然后等待调用。就如同包裹一样,你现在只是装好了包裹,但是还没有使用。怎么使用函数呢?在Python江湖中,我们使用函数叫做“调用

函数”,很简单就是输入函数名与参数所对应的数据。运行一下下面代码,观察终端里的效果。

解读分析:math(10)就是调用函数,math为定义函数的名字(定义与调用时名字一致);

传递参数,10对应函数参数x, 在调用函数时,将10传递给x; 在函数体中,y = 30 +11*10,

得出y的结果为140;那么,res就用来接收y的值,即res=140。所以,打印出来的结果就是140。OK,现在掌握调用函数了吧。

现在你看到就是函数最基本的形式,目的就是让大家先有个认知。

接下来,我们做个练习巩固一下。

请听题:定义一个函数,用户传入“XXX”,就打印出“您好,欢迎来到KFC餐厅,您的点餐为XXX”。这个XXX, 可以传入汉堡、薯条,任何内容。提示:使用input,接收用户输入内容,然后调用函数,完成功能。来,试一下:

上面我们调用函数,设置、传递参数是编写函数的重点。在Python江湖中,函数中无论设置、传递多少个参数都可以,哪怕不设置、传递参数也行。

先来了解一下函数类型。

们KFC餐厅,需要做一个欢迎广告语,每位顾客来的时候都要进行播放。那看一下,如何在Python中使用函数实现这个广告语。运行一下下面代码, 观察终端里的效果。

def helloKFC():

print('虽然我们生而不同')

print('但馋起来是一样的')

print('每个鸡翅都值得被啃个干净')

print('我们已经很饿了,你们呢?')

print('十翅一桶39元')

print('重磅回归,就在今天')

helloKFC()

观察上面的代码,这里定义了一个helloKFC()函数,但是括号里没有参数。这是因为,我们的广告也不需要接收用户内容,只需要原样打印广告即可,所以不需要传递参数。1江湖秘籍:即使没有参数,在定义函数、调用函数的时候也不能省略括号。2在这个例子中,也不需要return语句,因为里面的内容直接打印在屏幕上即可,不要返回值的。3简言之,函数的执行过程,可以有返回值,也可以没有返回值。好了,接下来,我们看看函数可以设置多少个参数。我们KFC餐厅在刚开业的时候,因为其他原因,只能为每位顾客提供汉堡、饮料、小食

三种食品。如果写成函数,这个函数就有3个参数。我使用hamburger、drink、snacks作为汉堡、饮料、小食的参数运行一下下面代码, 观察终端里的效果。编程题

在这里,我们设置了默认参数snacks='蛋挞',在调用函数的时候,蛋挞也会默认添加到菜单中。当然了,如果有的顾客不想吃蛋挞,他就想吃薯条怎么办。那就按顾客的来,顾客是上帝嘛。运行一下下面代码,观察终端里的效果。在调用函数时,参数一一传递;在第三次调用函数menu('培根烤鸡腿堡','橙汁','薯条')时,‘薯条‘会替换默认的参数’蛋挞‘,将snacks设置为’薯条‘。

了解完默认参数,我们接着往下看。后来,我们的餐厅经营越来越大,食品种类越来越多,但是每个人点餐的种类又不确定,我们又不能限制顾客点餐。这时候就需要使用【不定长参数】。它的格式比较特殊,先运行一下下面代码,观察终端里的效果。

def menu(*food):

return food

order1 = menu('香辣鸡腿堡','可乐')

order2 = menu('卤肉饭','老北京鸡肉卷','雪碧','可乐')

order3 = menu('烤串','火锅','培根烤鸡腿堡','橙汁','薯条','甜筒')

print(order1)

print(order2)

print(order3)

print(type(order1))

print(type(order2))

print(type(order3))

在调用函数时,参数一一传递;在第三次调用函数menu('培根烤鸡腿堡','橙汁','薯条')时,‘薯条‘会替换默认的参数’蛋挞‘,将snacks设置为’薯条‘。

了解完默认参数,我们接着往下看。后来,我们的餐厅经营越来越大,食品种类越来越多,但是每个人点餐的种类又不确定,我们又不能限制顾客点餐。这时候就需要使用【不定长参数】它的格式比较特殊,先运行一下下面代码,观察终端里的效果。

代码解读:这里使用一个星号*加上参数名就接收到了所有参数,无论参数写几个,都能接收到。而返回值就是参数名。我们将返回的内容打印出来,又打印了一下返回值的类型:< class 'tuple' >Tuple叫做元组,元组的写法是将所有内容放在小括号中,使用逗号隔开,和列表用法类似。但是又与列表不同,列表中的元素可以更改,而元组中的元素不可以更改。和列表相同的是:元组也是可以遍历的对象。使用for循环遍历一下。运行一下下面代码,观察终端里的效果编程题1

foriinfood:

print('点餐内容:'+i)

menu('香辣鸡腿堡','可乐')

menu('卤肉饭','老北京鸡肉卷','雪碧','可乐')

enu('烤串','火锅','培根烤鸡腿堡','橙汁','薯条','甜筒')

使用for循环,将元组中的内容遍历出来。一一显示。

我们研究一下常用的print()函数,翻看了一下Python宝典,其中是这样介绍print()函数的。代码片段

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

我们可以看到,print()函数中第一个参数objects带了*号,是不定长参数——这也就是print()函数可以传递任意数量的参数。

现在,你掌握了函数参数的不同形态,以后视具体需要,来设置函数参数。

函数,不仅可以支持多个参数,还可以支持多个返回值。接下来我们就讲讲如何使用return语句返回多个返回值。回到我们的KFC餐厅,我们要优惠活动,到店顾客,只要买单我们就有美食相送。具体规则:用户消费满69元,我们随机赠送10元食品一份;用户消费满99元,我们随机赠送10元食品一份外加一个冰激淋。代码已经写好了,先运行一下下面代码,观察终端里的效果。

编程题main.py

importrandom

foodten= ['蛋挞','鸡翅','薯条']

deforder(money):

ifmoney>99:

a=random.choice(foodten)

returna,'冰激淋'

elif69

b=random.choice (foodten)

returnb

else:

return'不好意思,您的消费达不到优惠活动'

print(order(50))

print(order(70))

print(order(130))观察代码:代码片段

importrandom

foodten= ['蛋挞','鸡翅','薯条']

deforder(money):

ifmoney>99:

a=random.choice(foodten)

在这里,有3条return语句,每条语句返回的内容都不一样,返回的数量也不一样。这就是返回多个值returna,'冰激淋'

returnb

return'不好意思,您的消费达不到优惠活动'

在开始时候,我们说过,函数封装了独立功能,一个程序往往由多个函数来配合实现

当多函数协作运行时,就涉及到函数中一个非常重要的内容—变量作用域。

什么是变量作用域?说白了,就是地盘问题;比如说,KFC是由哈兰·山德士老爷爷创立的,所有KFC餐厅都会听他的,他说下个月所有KFC要供应烤串,这肯定没问题;但是他如果去要求麦当劳餐厅,估计就没人理他了;但是如果特朗普说,所有的KFC与麦当劳餐厅都要卖“兰州拉面“,KFC与麦当劳肯定得卖,谁让他是美国总统呢。

我们把这个问题用代码写出来

先运行一下下面代码,观察终端里的效果。(报错后点击【跳过本题】)

编程题

main.py

trump='所有餐厅都要卖【兰州拉面】'

defKFC():

harland='所有KFC餐厅卖烤串'

print('KFC餐厅:%s'%trump)

print('KFC餐厅:%s'%harland)

defMcDonald():

print('麦当劳餐厅:%s'%trump)

print('麦当劳餐厅:%s'%harland)

KFC()

McDonald()

看代码感觉很美,运行代码就会发现报错喽。

运行KFC()函数没有任何问题;运行McDonald()函数就报错了;

给我们弹出一个bug, 在print('麦当劳餐厅:%s'%harland)这句代码中,抛出【NameError: name 'harland' is not defined】的错误。

这就是变量的作用问题:作用域分为全局作用域和局部作用域。

全局作用域:在所有函数之外赋值的变量,可以在程序任意位置使用(全局作用域),这就是全局变量;比如第一行的trump = '所有餐厅都要卖【兰州拉面】';它在KFC()与McDonald()两个函数中都起作用。

局部作用域:在某个函数内部赋值的变量,只能在当前函数内使用(局部作用域),出了这个函数,它就不起作用了,这就是局部变量;比如harland = '所有KFC餐厅卖烤串';它只在KFC()函数中起作用,在McDonald()就不起作用了。

可是,如果,我非让KFC的哈兰·山德士老爷爷说话在麦当劳管用怎么办?也就是非要让harland = '所有KFC餐厅卖烤串',在麦当劳中起作用怎么办

有办法,在harland = '所有KFC餐厅卖烤串'使用global对变量进行修饰,global表示全局意思,它就告诉计算机,这个变量变成了全局变量,它在任何地方都起作用。

globalharland好了global修饰词就学到这里。下面,我们看一下最常用的函数嵌套。

3.2函数嵌套

其实,我们都见过函数嵌套,比如:print(len('我爱你'))、print(type(10))

这就是print()函数嵌套了len()函数,print()函数嵌套了type()函数;这样,代码会先运行print()括号内的函数,再将这个函数结果放到print()函数中执行,打印出来。

这样操作,叫做在函数内部调用其他函数,我们自己定义的函数也可以这么做。

defhello():

print('欢迎光临KFC')

print('很高兴为您服务')

deforder():

print('这里是下单中心')

hello()

print('请您点餐')

print('以上菜单的菜品都有')

order()

在这里,我定义了两个函数,函数hello()与函数order(),在函数order()中调用了函数hello(),这样函数hello()中的代码会在函数order()中运行。

这就是函数的嵌套,在一个函数中调用其他函数。

讲到这儿,是不是都饿了。那就快去KFC吧,但是不要去KFC点拉面哦。

下节课带大家利用函数来解决项目问题。

下节课见。

相关主题
文本预览
相关文档 最新文档