###函数作用和定义 就是把曾经写过的功能独立的代码,打包封装,然后直接调用。 def 函数名(): 函数封装的代码 ...... 函数名一定要符合标识符命名规则。尽量使用小驼峰命名法(首个单词首字母小写,其他首字母大写) 函数名和变量名千万不能用一样的名字。否则会冲突。 注意:定义好函数之后,只表示这个函数封装了一段代码而已,不能主动执行。需要进行调用才可以执行。 ### 调用 在python中调用函数只需要:函数名()就可以进行调用。 在其他项目或者文件夹中调用之前定义过的函数,需要用import来调用。 ## 函数注释 函数的注释不要写在函数的上方,要写在函数的下面。 根据PEP8书写规范,函数与上方的任何代码应保持两个空行。 def xxx(): """xxx""" pass """"""加上个回车直接就弹出详细的注释名称,然后进行注释就行。 ###拓展 用import time来导入工具包 time.sleep()可以使后续的函数或者程序休眠。 ## 函数的参数 ### 形参和实参 def xxx():括号里面的参数叫做形参。 调用的xxx()这个括号里面的参数就叫做实参。 ## 函数的返回值 return 1、在一个函数里return下面的代码不会执行,所以不要写。 2、哪里调用的就把这个值返回到哪里。 3、返回的是值不是变量。在外部无法使用到,除非再用变量定义这个值。 有返回值的函数,比如input一定要用一个变量来接它,否则函数无法输出结果。没有返回值的函数,比如print不能用变量来接。 def sum_2_num(num1, num2): result = num1 + num2 return result sum_result = sum_2_num(10, 20) print("输出结果为:%d" % sum_result) ## 函数的嵌套调用 在一个函数内部调用另一个已经定义好的函数。 def test1(): print("") def test2(): test1() test2() ## 位置参数 位置参数顺序很重要,名字对应的就是名字、种类对应的就是种类,否则结果会很搞笑。 ### 拓展 如果需要多次调用函数,只需要再次调用就可以 比如: def a(x1, x2): print(a) a(a1, a2) a(a3, a4) ## 关键字实参 关键字实参不会使位置混淆,造成笑话。 比如: def a(x1, x2): print(a) a(x1 = a1, x2 = a2) ## 默认值 在函数中,我们直接给形参定一个默认值,这样除非实参在定义一个值,否则我们将直接使用给形参定义的这个默认值。这样我们就不用在重新给实参提供值了。 def a(x1=a1, x2=a1): . . . ## 让实参变成可选的 为了让一个函数中的实参变成可选的,可在没有提供实参的情况下,使函数仍然能运行,我们需要给这个实参对应的形参定义一个空字符串'',并把它放在最末尾。 比如: def a(num1, num2=''): if num2: print(num1, num2) else: print(num1) return a a(1, 2) 这样即使只输入一个实参,也能正确的运行。如果第二个实参也提供了,我们只需要在“a(1,2)”输入即可。 ## 函数返回字典,列表 函数不仅能返回值,还能返回字典或者列表等较复杂的数据结构。 ## 传递列表 将列表传递给函数,函数就直接能访问其内容。 def greet_users(names): for name in names: mag = 'hello'+name.title()+'!' print(mag) usernames = ['hannah', 'ty', 'margot'] greet_users(usernames) ### 函数修改列表 把列表传递给函数,函数就可以对这个函数进行修改,这个修改是永久性的,使你高效率的处理大量数据。 在我们写代码的时候,如果发现一个函数执行的任务过多,我们可以给它頭几个函数,保证每个函数只负责一项任务。然后使用函数的嵌套,在一个函数中调用另一个函数,这样更好。 ## 传递任意数量的实参 def a(*nums): print(nums) a(1,2,3,4,5) 这里面的*代表创建了名为num一个空元组,可以在里面放任意数量的实参。 **代表创建了一个名为num的空字典。 def a(**nums): print(nums) a(q='w')