1、第第4章章 Python函数函数函数(函数(functionfunction)由若干)由若干条语句组成,用于实现特条语句组成,用于实现特定的功能。函数包含函数定的功能。函数包含函数名、若干参数和返回值。名、若干参数和返回值。一旦定义了函数,就可以一旦定义了函数,就可以在程序中需要实现该功能在程序中需要实现该功能的位置调用该函数,给程的位置调用该函数,给程序员共享代码带来了很大序员共享代码带来了很大方便。在方便。在PythonPython语言中,语言中,除了提供丰富的系统函数除了提供丰富的系统函数(本书前面已经介绍了一(本书前面已经介绍了一下常用的系统函数)外,下常用的系统函数)外,还允许用户创
2、建和使用自还允许用户创建和使用自定义函数。定义函数。本章知识点本章知识点p声明函数声明函数p在函数中传递参数在函数中传递参数p变量的作用域变量的作用域pPythonPython内置函数内置函数p调用函数调用函数p方法调用方法调用p函数的返回值函数的返回值p全局变量和局部变量全局变量和局部变量p函数式编程函数式编程4.1 声明和调用函数声明和调用函数4.1.1 4.1.1 声明函数声明函数4.1.2 4.1.2 调用函数调用函数4.1.1 声明函数声明函数p可以使用可以使用defdef关键字来创建关键字来创建PythonPython自定义自定义函数,其基本语法结构如下:函数,其基本语法结构如下:
3、defdef 函数名函数名 ( (参数列表参数列表):):函数体函数体p参数列表可以为空,即没有参数;也可参数列表可以为空,即没有参数;也可以包含多个参数,参数之间使用逗号(以包含多个参数,参数之间使用逗号(, ,)分隔。函数体可以是一条语句,也可)分隔。函数体可以是一条语句,也可以由一组语句组成。以由一组语句组成。【例例4-1】 p创建一个非常简单的函数创建一个非常简单的函数PrintWelcome,它的功能是打印,它的功能是打印字符串字符串“欢迎使用欢迎使用Python”,代码,代码如下:如下:def PrintWelcome():print(欢迎使用欢迎使用Python);【例例4-2】
4、定义函数定义函数PrintString()PrintString(),通过参数决定要打印,通过参数决定要打印的内容。的内容。def PrintString(str):def PrintString(str):print(str);print(str);变量变量strstr是函数的参数。在函数体中,参数可以是函数的参数。在函数体中,参数可以像其他变量一样被使用。像其他变量一样被使用。可以在函数中定义多个参数,参数之间使用逗号可以在函数中定义多个参数,参数之间使用逗号分隔。分隔。【例例4-3】p定义一个函数定义一个函数sum()sum(),用于计算并打印两,用于计算并打印两个参数之和。函数个参数之
5、和。函数sum()sum()包含两个参数。包含两个参数。参数参数num1num1和和num2num2,代码如下:,代码如下:defdef sum(num1, num2): sum(num1, num2):print(num1 + num2);print(num1 + num2);4.1.2 调用函数调用函数p可以直接使用函数名来调用函数,无可以直接使用函数名来调用函数,无论是系统函数还是自定义函数,调用论是系统函数还是自定义函数,调用函数的方法都是一致的。函数的方法都是一致的。【例例4-4】print(len(student);print(len(student);程序得到运行结果为程序得到运
6、行结果为7 7。【例例4-5】p 调用【例调用【例4-34-3】中声明的函数】中声明的函数sum()sum(),计,计算算100+200100+200之和,代码如下:之和,代码如下:sum(100, 200);sum(100, 200);程序得到运行结果为程序得到运行结果为300300。4.2 参数和返回值参数和返回值4.2.1 4.2.1 在函数中传递参数在函数中传递参数4.2.2 4.2.2 函数的返回值函数的返回值4.2.1 在函数中传递参数在函数中传递参数p1 1普通参数普通参数pPythonPython实行按值传递参数。值传递指调实行按值传递参数。值传递指调用函数时将常量或变量的值(
7、通常称其用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称其为实参)传递给函数的参数(通常称其为形参)。值传递的特点是实参与形参为形参)。值传递的特点是实参与形参分别存储在各自的内存空间中,是两个分别存储在各自的内存空间中,是两个不相关的独立变量。因此,在函数内部不相关的独立变量。因此,在函数内部改变形参的值时,实参的值一般是不会改变形参的值时,实参的值一般是不会改变的。【例改变的。【例4-54-5】介绍的程序都属于按】介绍的程序都属于按值传递参数的情况。值传递参数的情况。【例例4-6】 在函数中按值传递参数的在函数中按值传递参数的例子例子def func(num):def f
8、unc(num):num += 1;num += 1;a = 10a = 10func(a);func(a);print(a);print(a);【例例4-7】 分别打印形参和实参的地分别打印形参和实参的地址址def func(num):def func(num): print address of num: , print address of num: , id(num)id(num)a = 10a = 10func(a);func(a);printaddress of a: , id(a);printaddress of a: , id(a);运行结果如下:运行结果如下:address
9、of num: 37844516address of num: 37844516address of a: 37844516address of a: 378445162列表和字典参数列表和字典参数p 【例例4-84-8】 使用列表作为函数参数的例子。使用列表作为函数参数的例子。defdef sum(list): sum(list):total = 0;total = 0;for x in range(for x in range(lenlen(list):(list):print print strstr(listx)+;(listx)+;total+= listx;total+= list
10、x;print = + print = + strstr(total);(total);list = 10, 20, 30, 40list = 10, 20, 30, 40sum(list);sum(list);运行结果运行结果10+10+20+20+30+30+40+40+=100=100【例例4-9】 使用字典作为函数参数的例子使用字典作为函数参数的例子defdef print_dictprint_dict( (dictdict):):for (k, v) in for (k, v) in dict.itemsdict.items():():print print dictdict%s =
11、 % k, v%s = % k, vdictdict = a : apple, b : = a : apple, b : banana, g : grape, o : banana, g : grape, o : orangeorangeprint_dictprint_dict( (dictdict););运行结果运行结果dicto = orangedicto = orangedictg = grapedictg = grapedicta = appledicta = appledictb = bananadictb = banana【例例4-10】 在函数中修改列表参数的在函数中修改列表参数
12、的例子例子def swap(list):def swap(list): temp = list0 temp = list0 list0 = list1 list0 = list1 list1 = temp list1 = templist = 1,2list = 1,2print(list)print(list)swap(list)swap(list)print(list)print(list)运行结果运行结果10, 2010, 2020, 1020, 10【例例4-11】 在函数中修改字典参数的在函数中修改字典参数的例子例子def changeA(dict):def changeA(dict
13、): dicta = 1 dicta = 1 d = a: 10, b: 20, c: 30d = a: 10, b: 20, c: 30changeA(d)changeA(d)print(d)print(d)运行结果运行结果a: 1, c: 30, b: 20a: 1, c: 30, b: 203参数的默认值参数的默认值p在在PythonPython中,可以为函数的参中,可以为函数的参数设置默认值。可以在定义函数设置默认值。可以在定义函数时,直接在参数后面使用数时,直接在参数后面使用“= =”为其设置默认值。在调用为其设置默认值。在调用函数时可以不指定拥有默认值函数时可以不指定拥有默认值的参
14、数的值,此时在函数体中的参数的值,此时在函数体中以默认值作为该参数以默认值作为该参数【例例4-12】 设置参数默认值的例子设置参数默认值的例子defdef say(message, times = 1): say(message, times = 1): print(message print(message * * times) times)say(hello)say(hello)say(Python, 3)say(Python, 3)p函数函数say()say()有有2 2个参数:个参数:messagemessage和和timestimes。其中。其中timestimes的默认值为的默认值
15、为1 1。运行结果如下:。运行结果如下:hellohelloPythonPythonPythonPythonPythonPython【例例4-13】def func1(a = 1, b, c=10):def func1(a = 1, b, c=10):d = a + b d = a + b * * c; c;func(10, 20, 30)func(10, 20, 30)【例例4-13】的运行结果的运行结果4可变长参数可变长参数pPythonPython还支持可变长度的参数列表。可变长参还支持可变长度的参数列表。可变长参数可以是元祖或字典。当参数以数可以是元祖或字典。当参数以* *开头时,表开
16、头时,表示可变长参数将被视为一个元祖,格式如下:示可变长参数将被视为一个元祖,格式如下:defdef funcfunc( (* *t):t):p在在funcfunc () ()函数中函数中t t被视为一个元祖,使用被视为一个元祖,使用tindextindex获取每一个可变长参数。获取每一个可变长参数。p可以使用任意多个实参调用可以使用任意多个实参调用funcfunc()()函数,例如函数,例如:funcfunc(1,2,3,4)(1,2,3,4)【例例4-14】 以元祖为可变长参数的实以元祖为可变长参数的实例例defdef func1( func1(* *t):t): print( print
17、(可变长参数数量如下:可变长参数数量如下:) print( print(lenlen(t)(t) print( print(依次为:依次为:) for x in range( for x in range(lenlen(t):(t): print(tx); print(tx);func1(1,2,3,4);func1(1,2,3,4);p 运行结果如下:运行结果如下:可变长参数数量如下:可变长参数数量如下:4 4依次为:依次为:1 12 23 34 4【例例4-15】 使用可变长参数计算任意使用可变长参数计算任意个指定数字之和个指定数字之和defdef sum( sum(* *t):t): s
18、um=0; sum=0; for x in range( for x in range(lenlen(t):(t): print( print(strstr(tx)+);(tx)+); sum += tx; sum += tx; print(=+ print(=+strstr(sum);(sum);sum(1,2);sum(1,2);sum(1,2,3,4);sum(1,2,3,4);sum(11,22,33,44,55);sum(11,22,33,44,55);结果如下结果如下1+1+2+2+=3=31+1+2+2+3+3+4+4+=10=1011+11+22+22+33+33+44+44+
19、55+55+=165=165【例例4-16】def sum(def sum(* *t):t): sum=0; sum=0; for x in range(len(t): for x in range(len(t): print(str(tx)+); print(str(tx)+); sum += tx; sum += tx; if len(t)0: if len(t)0: print(=+str(sum); print(=+str(sum);sum();sum();【例例4-17】def sum(def sum(* * *t):t): print(t); print(t);sum(a=1,b=
20、2,c=3);sum(a=1,b=2,c=3);4.2.2 函数的返回值函数的返回值对对【例例4-34-3】中的中的sum()sum()函数进行改造,通过函数的返回值返回相加的结函数进行改造,通过函数的返回值返回相加的结果,代码如下:果,代码如下:def sum(num1, num2):def sum(num1, num2): return num1 + num2; return num1 + num2;print(sum(1, 3);print(sum(1, 3);运行结果为运行结果为4 4。【例例4-19】 defdef filter_evenfilter_even(list):(list
21、): list1 = ; list1 = ; for for i i in range( in range(lenlen(list):(list): if list if listi i %2 =0: %2 =0: list1.append(list list1.append(listi i) i i -=1; -=1; return list1; return list1;list=1,2,3,4,5,6,7,8,9,10list=1,2,3,4,5,6,7,8,9,10list2 = list2 = filter_evenfilter_even(list)(list)print(list2
22、);print(list2);4.3 全局变量和局部变量全局变量和局部变量p4.3.1 4.3.1 变量的作用域变量的作用域p4.3.2 4.3.2 在在IDLEIDLE的调试窗口中查看变量的的调试窗口中查看变量的值值p4.3.3 4.3.3 在在PyCharmPyCharm的调试窗口中查看变的调试窗口中查看变量的值量的值3.1.3 变量的作用域变量的作用域p局部变量只在定义它的函数内部有效,局部变量只在定义它的函数内部有效,在函数体之外,即使使用同名的变量,在函数体之外,即使使用同名的变量,也会被看作是另一个变量。全局变量在也会被看作是另一个变量。全局变量在定义后的代码中都有效,包括它后面定
23、定义后的代码中都有效,包括它后面定义的函数体内。如果局部变量和全局变义的函数体内。如果局部变量和全局变量同名,则在定义局部变量的函数中,量同名,则在定义局部变量的函数中,只有局部变量是有效的。只有局部变量是有效的。【例例4-20】a = 100;a = 100;# # 全局变量全局变量defdef setNumbersetNumber():():a = 10;a = 10;# # 局部变量局部变量print(a);print(a);# # 打印局部变量打印局部变量a asetNumbersetNumber();();print(a);print(a);# # 打印全局变量打印全局变量$a$a4
24、.3.2 在在IDLE的调试窗口中查看变量的调试窗口中查看变量的值的值p1 1设置断点设置断点p2 2单步调试单步调试1设置断点设置断点断点是调试器的功能之一,可以让程序中断在需断点是调试器的功能之一,可以让程序中断在需要的地方,从而方便对其进行分析。用鼠标右击要的地方,从而方便对其进行分析。用鼠标右击要设置断点的程序行,在快捷菜单里选择要设置断点的程序行,在快捷菜单里选择Set Set BreakpontBreakpont菜单项,会在当前行设置断点,该行菜单项,会在当前行设置断点,该行代码会显示黄色背景代码会显示黄色背景。2单步调试单步调试p 设置断点后,运行程序,可以停设置断点后,运行程序
25、,可以停在断点处,然后一条语句一条语在断点处,然后一条语句一条语句的单步运行。单步调试可以看句的单步运行。单步调试可以看到程序的运行过程,同时可以查到程序的运行过程,同时可以查看在某一时刻某个变量的值。下看在某一时刻某个变量的值。下面介绍在面介绍在IDLEIDLE中单步调试程序的中单步调试程序的方法。方法。p 例如在例如在IDLEIDLE中打开例中打开例3-7.py3-7.py,然,然后在菜单中选择后在菜单中选择Run / Python Run / Python ShellShell,打开,打开Python ShellPython Shell窗口窗口。在。在Python ShellPython
26、 Shell的菜单中,选的菜单中,选择择Debug/ DebuggerDebug/ Debugger,Python Python ShellShell窗口中会出现下面文字,窗口中会出现下面文字,DEBUG ONDEBUG ONp 同时打开同时打开Debug ControlDebug Control窗口窗口程序停留在第程序停留在第1行行程序停留在断点处程序停留在断点处4.3.3 在在PyCharm的调试窗口中查看的调试窗口中查看变量的值变量的值p 1 1设置和应用断点设置和应用断点p 将光标移动至要设置断点的程序行,选择将光标移动至要设置断点的程序行,选择“Run”“Toggle Line Br
27、eakpointer”Run”“Toggle Line Breakpointer”菜单项,会菜单项,会在当前行设置断点,该行代码前会出现一个红色的圆在当前行设置断点,该行代码前会出现一个红色的圆点图标,代表断点。点图标,代表断点。2调试调试Python程序程序p在在PyCharmPyCharm中打开中打开PythonPython程序单击工具栏程序单击工具栏上调试按钮,即可调试当前的上调试按钮,即可调试当前的PythonPython程程序。程序会暂停在断点代码处,并在下序。程序会暂停在断点代码处,并在下方的方的DebugDebug窗格中显示变量的值。窗格中显示变量的值。p当前中断运行的程序行显示
28、为淡绿色背当前中断运行的程序行显示为淡绿色背景条,并且该行代码前会出现一个箭头景条,并且该行代码前会出现一个箭头图标。单击调试工具栏上的继续按钮可图标。单击调试工具栏上的继续按钮可以继续运行程序,单击调试工具栏上的以继续运行程序,单击调试工具栏上的终止按钮可以终止运行程序。终止按钮可以终止运行程序。在在PyCharm中设置断点中设置断点看变量的值看变量的值p也可以将鼠标移至变量上面,通过弹出也可以将鼠标移至变量上面,通过弹出的提示查看变量的值,如图的提示查看变量的值,如图4-84-8所示。所示。3单步运行单步运行p单步运行就是一步一步地运行程序,程单步运行就是一步一步地运行程序,程序员可以使用
29、单步运行跟踪程序的运行序员可以使用单步运行跟踪程序的运行轨迹。选择轨迹。选择RunStep OverRunStep Over(或(或Step Step IntoInto)菜单项可以执行单步运行,程序)菜单项可以执行单步运行,程序行前面的箭头图标会移动到下一行程序行前面的箭头图标会移动到下一行程序。Step Over Step Over 和和Step IntoStep Into的区别在于,的区别在于,当程序停留在调用函数的语句处时,单当程序停留在调用函数的语句处时,单击击Step IntoStep Into会进入函数内部,停留在函会进入函数内部,停留在函数的第数的第1 1行语句处;单击行语句处;
30、单击Step OverStep Over会越会越过函数,停留在函数后面的第过函数,停留在函数后面的第1 1行语句处行语句处。4.4 Python内置函数内置函数4.3.1 4.3.1 数学运算函数数学运算函数4.3.2 4.3.2 字符串处理函数字符串处理函数4.3.3 4.3.3 其他常用内置函数其他常用内置函数3.3.1 数学运算函数数学运算函数函数原型具体说明abs()abs(x)返回 x 的绝对值pow()pow(x, y)返回x的y次幂Round()round(x, n)返回浮点数x的四舍五入值,参数n指定保留的小数位数divmod()divmod(a, b)返回 a除以b的商和余数
31、,返回一个元组。例如divmod(a, b)返回 (a / b, a % b)【例例4-21】print(abs(-1);print(abs(-1);print(round(80.23456, 2)print(round(80.23456, 2)print(pow(2,3)print(pow(2,3)print(print(divmoddivmod(8, 3);(8, 3);p运行结果如下:运行结果如下:1 180.2380.238 8(2, 2)(2, 2)4.3.2 字符串处理函数字符串处理函数1 1字符串中字符大小写的变换字符串中字符大小写的变换函数原型具体说明lower()str.lo
32、wer()将字符串str中的字母转换为小写字母upper()str.upper()将字符串str中的字母转换为大写字母swapcase()str.swapcase()将字符串str中的字母大小写互换capitalize()str.capitalize ()将字符串str中的首字母大写title()str. title()将字符串str中的首字母大写,其余为小写【例例4-22】str1 =hello world;str1 =hello world;str2 =HELLO WORLD;str2 =HELLO WORLD;str3 =Hello world;str3 =Hello world;pri
33、nt(str1.upper();print(str1.upper();print(str2.lower();print(str2.lower();print(str3.swapcase()print(str3.swapcase()print(str3.swapcase()print(str3.swapcase()print(str1.capitalize();print(str1.capitalize();print(str2.title();print(str2.title();运行结果运行结果HELLO WORLDHELLO WORLDhello worldhello worldhELLO
34、hELLO WORLD WORLDhELLOhELLO WORLD WORLDHello worldHello worldHello WorldHello World2指定输出字符串时的对齐方式指定输出字符串时的对齐方式函数原型具体说明ljust()str.ljust(width,fillchar)左对齐输出字符串str,总宽度为参数width,不足部分以参数fillchar指定的字符填充,默认使用空格填充rjust()str.rjust(width,fillchar)右对齐输出字符串str,总宽度为参数width,不足部分以参数fillchar指定的字符填充,默认使用空格填充center()
35、str.center(width,fillchar)居中对齐输出字符串str,总宽度为参数width,不足部分以参数fillchar指定的字符填充,默认使用空格填充zfill ()str. zfill(width)将字符串str变成width长,并且右对齐,不足部分用0补足【例例4-23】str1 =hello world;str1 =hello world;print(str1.ljust(30, print(str1.ljust(30, * *););print(str1.rjust(30, print(str1.rjust(30, * *););print(str1.center(30,
36、 print(str1.center(30, * *)print(str1. print(str1. zfillzfill (30) (30)p运行结果如下:运行结果如下:hello worldhello world* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *hello worldhello world* * * * * * * * * *hello worldhello world* * * * * * * * * * *0000000000000000000hello world0
37、000000000000000000hello world3搜索和替换搜索和替换函数原型具体说明find()str.find(substr, start, end)返回字符串str中出现子串substr的第一个字母的位置,如果str中没有substr,则返回-1。搜索范围从start至endindex()str.index(substr, start, end)与find()函数相同,只是在str中没有substr时,index()函数会返回一个运行时错误rfind()str.rfind(substr, start, end)返回从右侧算起,字符串str中出现子串substr的第一个字母的位置
38、,如果str中没有substr,则返回-1。搜索范围从start至endrindex()str.rindex (substr, start,end)与rfind()函数相同,只是在str中没有substr时,rindex()函数会返回一个运行时错误count()str.count(substr, start,end)计算substr在str中出现的次数。统计范围从start至endreplace()str.replace(oldstr, newstr, count)把str中的oldstr替换为newstr,count为替换次数strip()str.strip(chars)把字符串str中前后
39、chars中有的字符全部去掉。如果不指定参数chars,则会去掉空白符(包括n, r, t和 )lstrip()str.lstrip(chars)把字符串str中前面包含的chars中有的字符全部去掉。如果不指定参数chars,则会去掉空白符(包括n, r, t和 )rstrip()str.rstrip(chars)把字符串str中前面包含的chars中有的字符全部去掉。如果不指定参数chars,则会去掉空白符(包括n, r, t和 )expandtabs()str. expandtabs(tabsize)把字符串str中的tab字符替换为空格,每个tab替换为tabsize个空格,默认是8个
40、【例例4-24】str1 =hello world Python;str1 =hello world Python;list1 = str1.split( );list1 = str1.split( );print(list1);print(list1);str1 =hello worldstr1 =hello worldnPythonnPython;list1 = str1.splitlines();list1 = str1.splitlines();print(list1);print(list1);list1 = hello, world, Pythonlist1 = hello, wo
41、rld, Pythonstr1=#str1=#print(str1.join(list1)print(str1.join(list1)运行结果如下:运行结果如下:hello, world, Pythonhello, world, Pythonhello world, Pythonhello world, Pythonhello#world#Pythonhello#world#Python5字符串判断相关字符串判断相关函数原型具体说明startswith()str. startswith(substr)判断str是否以substr开头endswith()str.endswith(substr)判
42、断str是否以substr为结尾isalnum()str.isalnum()判断str是否全为字母或数字isalpha()str.isalpha()判断str是否全为字母isdigit()str.isdigit()判断str是否全为数字islower()str.islower()判断str是否全为小写字母isupper()str.isupper()判断str是否全为大写字母【例例4-26】tr=python String functiontr=python String functionprint(str+.startwith(t) print(str+.startwith(t) 的结果的结果
43、 ) ) print(str.startswith(t)print(str.startswith(t)print(str+ .endwith(d) print(str+ .endwith(d) 的结果的结果 ) )print(str.endswith(d)print(str.endswith(d)print(str+ .isalnum() print(str+ .isalnum() 的结果的结果) )print(str.isalnum()print(str.isalnum()str=pythonStringfunctionstr=pythonStringfunctionprint(str+ .
44、isalnum() print(str+ .isalnum() 的结果的结果) )print(str.isalnum()print(str.isalnum()print(str+ .isalpha() print(str+ .isalpha() 的结果的结果 ) )print(str.isalpha()print(str.isalpha()print(str+ .isupper() print(str+ .isupper() 的结果的结果) )print(str.isupper()print(str.isupper()print(str+ .islower() print(str+ .islo
45、wer() 的结果的结果) )print(str.islower()print(str.islower()print(str+ .isdigit() print(str+ .isdigit() 的结果的结果) )print(str.isdigit()print(str.isdigit()str=3423str=3423print(str+ .isdigit() print(str+ .isdigit() 的结果的结果) )print(str.isdigit()print(str.isdigit()运行结果如下:运行结果如下:python String function.startwith(t)
46、 python String function.startwith(t) 的结果的结果 FalseFalsepython String function.endwith(d) python String function.endwith(d) 的结果的结果 FalseFalsepython String function.isalnum() python String function.isalnum() 的结果的结果FalseFalsepythonStringfunction.isalnum() pythonStringfunction.isalnum() 的结果的结果TrueTruepyt
47、honStringfunction.isalpha() pythonStringfunction.isalpha() 的结果的结果 TrueTruepythonStringfunction.isupper() pythonStringfunction.isupper() 的结果的结果FalseFalsepythonStringfunction.islower() pythonStringfunction.islower() 的结果的结果FalseFalsepythonStringfunction.isdigit() pythonStringfunction.isdigit() 的结果的结果Fa
48、lseFalse3423.isdigit() 3423.isdigit() 的结果的结果TrueTrue4.5 函数式编程函数式编程4.5.1 4.5.1 函数式编程概述函数式编程概述4.5.2 Python4.5.2 Python函数式编程常用的函数函数式编程常用的函数4.5.1 函数式编程概述函数式编程概述1 1什么是函数式编程什么是函数式编程函数式编程一种编程的基本风格,也就是函数式编程一种编程的基本风格,也就是构建程序的结构和元素的方式。函数式编构建程序的结构和元素的方式。函数式编程将计算过程看作是数学函数,也就是可程将计算过程看作是数学函数,也就是可以使用表达式编程。在函数的代码中,
49、函以使用表达式编程。在函数的代码中,函数的返回值只依赖传入函数的参数,因此数的返回值只依赖传入函数的参数,因此使用相同的参数调用函数使用相同的参数调用函数2 2次,会得到相同次,会得到相同的结果。的结果。(1)头等函数()头等函数(First-class function)p如果一个编程语言把函数视为头等函数,则可如果一个编程语言把函数视为头等函数,则可以称其拥有头等函数。拥有头等函数的编程语以称其拥有头等函数。拥有头等函数的编程语言可以将函数作为其他函数的参数,也可以将言可以将函数作为其他函数的参数,也可以将函数作为作为其他函数的返回值。可以把函数函数作为作为其他函数的返回值。可以把函数赋值
50、给变量或存储在元组、列表、字典、集合赋值给变量或存储在元组、列表、字典、集合和对象等数据结构中。有的语言还支持匿名函和对象等数据结构中。有的语言还支持匿名函数。数。p在拥有头等函数的编程语言中,函数名没有任在拥有头等函数的编程语言中,函数名没有任何特殊的状态,而是将函数看作是何特殊的状态,而是将函数看作是functionfunction类类型的二进制类型。型的二进制类型。(2)高阶函数()高阶函数(Higher-order function)高阶函数是头等函数的一种实践,它是可以将其高阶函数是头等函数的一种实践,它是可以将其他函数作为参数或返回结果的函数。例如,定义他函数作为参数或返回结果的函
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。