python语言的函数库采用什么语言编写,请用python语言编写一个函数
七。Python中的函数编程(第一部分)
-从一个高中生的角度来学习Python
关键词:
Python高中生学编程MIT公开课视频Python函数编程递归递归函数递归调用
1.为什么要引入函数?
-
在学习初期,我们写的程序都比较简单,功能单一,代码少。让我们考虑一下。如果要处理的应用程序变得越来越复杂,我们是否一直在一个地方编写代码?这样下去,会有什么结果?
你可以考虑一下。如果一部小说不分章节甚至段落,读起来会是什么感觉?
其实我们在编写代码的时候,一方面需要实现代码的功能,另一方面需要有良好的可读性,便于维护、修改和他人使用。因此,随着功能变得复杂,我们将对应用程序进行划分、简化和模块化。就像买回来的拼装玩具,功能就是这些玩具的部件。
在我们研究的初期,我们都使用印刷品。打印其实是一个功能,但是是系统提供的功能。任何人在任何时候都可以使用它来实现它的功能。
下面的视频来自麻省理工的公开课视频,详细介绍了编程中为什么需要引入函数。
[在此插入视频]
为什么需要介绍函数的视频?
函数的实际应用说明
二、函数的定义
-
1.函数的定义
先说一个例子,是一个可以计算任意大小的斐波那契数列的函数:
一个
2
三
四
五
六
def fib(n):#向上写斐波纳契数列ton
打印一个斐波纳契数列最多吨。
a,b=0,1
而一个
普林塔,
a,b=b,a b
在详细介绍函数的定义之前,我们先来看看这段代码:
1:定义函数
第2行:记住,这是一行有三个引号的注释(单引号效果)
3.第三行:很奇怪。它实际上是一个赋值语句。当需要给多个变量赋值时,可以这样写。看起来很简洁。根据等号前面的变量顺序,将下面的值逐一赋给变量。在这里,所有变量都被赋予整数,但实际上,任何类型都可以使用,比如:
aa,bb,cc,dd=1,2.3,1.3e2,"字符串"
第4行:在循环语句的同时,注意写这样的语句,不要忘记“:”
第5行:我们应该对这句话很熟悉,但要注意A后面的“,”号;这意味着在打印变量A之后,没有换行。因为是循环,所以下次执行这个print语句时,print的内容会跟随上一次打印,不换行;但是,如果没有“,”的话,那么每次执行打印时,都会自动换行。
第6行:在第3行,我们介绍了这是一种赋值的写法,这句话更进一步。作业的内容是多个表达式。
还是那句话,注意缩进。在这个例子中有两层缩进。
函数的定义:
元素1:关键字def
元素二:函数名的规则和变量名的规则类似,但一般好的编程风格是将函数名和它们实现的功能套现。
元素3:函数名后面有一对()。
四个元素: ()可以包含一个或多个参数,当然也可以没有参数。
五行:“:”
元素6:函数体必须缩进。
2.函数调用
函数定义后,只有我们调用它,函数才能被执行。实际上,当我们使用print语句时,我们是在“调用打印函数”。
那么怎么称呼我们上面举的例子呢?
.#现在调用我们刚刚定义的函数:
.国际纤维协会(2000年)
0 1 1 2 3 5 8 13 21 34 55 89144 233 377 610 987 1597
Fib(2000)是调用,下面一行,是这个函数的执行结果,显示2000以下的斐波那契数列;因为我们在printa后面加了“,”所以数列是一行显示的,否则这些数字会一个一个垂直显示。
3.关于函数的参数
函数的参数对于我们这些初学者来说比较费解(个人感觉)。事实上,它们类似于我们数学中的函数,比如:
y=f(x)
y=f(x1,y1)
y=f(x1,x2,…,xn)
所以,我们可以这样理解:
函数的参数相当于我们数学中函数的自变量。
函数可以没有参数,也可以有一个或多个参数。
还有另一种特殊情况:
回想印刷的使用,我们可以:
打印一份
您还可以:
打印a、b、c、d、e
也就是说,参数的数量是可变的。
以上只是简单的概念性介绍。python在函数参数方面还有许多其他特性:
1)默认参数(default argumentvalues)
一个
2
三
四
五
六
deffib(n=2000):# writeFibonacci数列直到n
打印一个斐波纳契数列最多吨。
a,b=0,1
而一个
普林塔,
a,b=b,a b
这个定义好的函数在我们调用的时候可以直接使用。
纤维()
0 1 1 2 3 5 8 13 21 34 55 89144 233 377 610 987 1597
但是,如果它不是默认的参数定义,像这样调用系统将会给出一个错误:
纤维()
回溯(最近一次呼叫):
文件“”中的第1行
TypeError: fib()正好接受1个参数(给定0个)
2)关键字参数(关键字参数)
参数是为函数调用设计的语法规则;
对于功能:
function_ex(arg1,arg2="arg2 ",arg3)
Pass#关键字,用于占位符
我们可以用下面的方法来调用(我们假设参数的类型是string):
function_ex("arg1 ")
function_ex(arg1="arg111 "," arg333 ")
function_ex("arg111 ",arg3="arg333 ")
function_ex(arg3="arg333 ",arg1="arg111 ",arg2="arg222 ")
关键字参数可以不按照参数表的实际顺序,但要尽量按顺序写,否则容易出错。
4.函数的返回值
或者拿我们数学的功能来说明:
对于功能:
y=f(x)
y=f(x1,y1)
y=f(x1,x2,…,xn)
如果我们给定了自变量值,一定有对应的Y值。我们同样可以认为Y是函数的返回值。
稍微修改一下上面的fib函数:
一个
2
三
四
五
六
七
八
def fib2(n): # returnFibonacci数列直到n
返回一个包含第n个斐波那契数列的列表,
结果=[]
a,b=0,1
而一个
result.append(a)#见下文
a,b=b,a b
回送结果
这些修改是:
第1行:我们再次将其重命名,现在函数名为fib2。
3:增加了一个新的变量结果。记住,[]表示列表类型,我们将结果初始化为一个空列表。这句话达到了两个目的:一是隐式地表明结果是一个列表类型的变量,二是初始化变量。
第6行:这个句子很难理解。列表类型在之前的博客中已经介绍过了。它包含了很多“方法”来实现各种功能,比如append来添加一个元素到列表中,pop来弹出列表的最后一个元素等等。注意这通电话的写法。Result.append(a)等效于result=result [a]
第7行:返回结果
对于返回值,强调以下内容也很重要:
要素1:
函数可以没有return语句,但是没有return时,返回值为None,也是保留关键字;
纤维(0)
printfib(0)
没有人
两个要素:
return语句可以没有值,在这种情况下,它也不返回任何值。
三个要素:
正常情况,返回值
下面是视频讲解。
插入视频
三。变量的范围
-
我们将在程序中定义许多变量。引入函数后,变量的作用域(或变量的可用范围)需要仔细考虑。
函数外定义的变量可以在函数中使用吗?
函数中定义的变量可以在函数体外部使用吗?
这些是我们在本节中讨论的问题。
1.局部变量
简单来说,函数体内定义的变量的作用域被限制在函数体内,如果在函数体外使用,就会报错。
def func_test01():
.a1=10
.打印a1
.
函数_测试01()
10
打印a1
回溯(最近一次呼叫):
文件“”中的第1行
名称错误:未定义名称“a1”
2.全局变量
比如上面,恰恰相反,是一个全局变量。请参见以下示例:
a1=1
def测试函数():
.打印a1
.打印a2
.
a2=2
test_func()
一个
2
即使a2是在函数后面定义的,也可以在函数中使用。
3.强制它成为全局变量。
如果在函数体中声明了与全局变量同名的变量,此时,全局变量将被覆盖,就像声明了同名的局部变量一样。
一个
2
三
四
五
六
七
八
九
def foo():
打印 \ n调用foo().
bar=200
打印 in foo(),bar is ,bar
bar=100
打印在__main__,bar is ,bar
foo()
打印 \ nin _ _ main _ _,bar is(still),bar
输出结果如下:
在__main__中,bar是100
调用foo().
在foo()中,bar是200
在__main__中,bar是(仍然)100
如何解决这个问题?这需要使用global强制变量成为全局变量,并进行以下更改:
一个
2
三
四
五
六
七
八
九
10
def foo():
全球酒吧
打印 \ n调用foo().
bar=200
打印 in foo(),bar is ,bar
bar=100
打印在__main__,bar is ,bar
foo()
打印 \ nin _ _ main _ _,bar is(still),bar
输出结果如下:
在__main__中,bar是100
调用foo().
在foo()中,bar是200
在__main__,bar是(仍然)200
这样,函数被调用后,bar的值就改变了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。