python function 修复文件 05

函数

函数的作用:

      结构化编程对代码的最基本的封装,一般按照功能组织一段代码。

       封装的目的为了复用,减少余代码。、

       代码更加简洁美观,可读易懂。

函数分类

      内建函数:max(),reversed()等。

       库函数:math.celi()等。

函数定义,调用

     def语句定义函数:

      def 函数名(参数列表):

                函数体(代码块)

                [return 返回值]

                    函数名就是标识符,命名要求一样

                    语句块必须缩进,约定4个空格。

                    python的函数没有return语句,隐式会返回一个none值。

                    定义中的参数列表成为形式参数,只是一种符号表达,简称形参。

调用

      函数定义,只是声明一个函数,他不会被执行,需要调用。

       调用的方式,就是函数名加上小括号,括号内写上参数。

       调用时写的参数是实际参数,是实实在在传入的值,简称实参。

参数传递

        在python中,类型属于对象,变量是没有类型的:

        a = [1.2.3]        a = 'Runoob'

        上例中,[1,2,3]是list类型‘Runoob’是string类型,而变量a是没有类型,它仅仅是一个对象大的引用,是一个指向list类型对象,也可以是指向string类型对象。

不可更改和可更改对象

        string,tuples,numbers是不可更改对象,list,dict是可以修改对象。

        不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,在让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a.

        可变类型:变量赋值 lan=[1,2,3,4]后再赋值la[2]=5则是将list la的第三个元素值更改,它本身没有动,只是内部一部分值被修改。

参数

        必须参数,关键字参数,默认参数,不定长参数

        必须参数:要以正确的顺序传入函数。调用时的数量必须和声明式的一样。调用printme()函数,必须传入一个参数。

        关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

        默认参数:调用函数时,如果没有传递参数,不会使 用默认参数:
 
#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="runoob" )
print ("------------------------")
printinfo( name="runoob" )

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:

#!/usr/bin/python3
 
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   for var in vartuple:
      print (var)
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )

以上实例输出结果:

输出:
10
输出:
70
60
50

声明函数时,参数中星号(*)可以单独出现,例如:

def f(a,b,*,c):
    return a+b+c

用法:星号(*)后的参数必须用关键字传入。

>>> def f(a,b,*,c):
...     return a+b+c
... 
>>> f(1,2,3)   # 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 3 were given
>>> f(1,2,c=3) # 正常
6
>>>

全局变量和局部变量

           定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

            局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问,调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

            当局部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字进行修改。

猜你喜欢

转载自blog.csdn.net/buddhaisaboy/article/details/80681740