首页 > 代码库 > Python菜鸟学习手册06----函数

Python菜鸟学习手册06----函数

1.简介 

        函数是重用的程序段。它们允许你给一块语句一个名称,然后你可以在你的程序的任何地方使用这个名称任意多次地运行这个语句块。这被称为调用函数。我们已经使用了许多内建的函数,比如input()和range()。

2.函数的定义和调用

       函数通过def关键字定义。def关键字后跟一个函数的标识符名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。

def sayHi():<span style="white-space:pre">						</span>#无参函数的定义,且没有返回值。函数将自动返回None。None是Python中的一个特别的数据类型,用来表示什么都                                                        #没有,相当于C中的NULL。
    print("你好我是王尼玛")<span style="white-space:pre">				</span>#注意缩进
sayHi()<span style="white-space:pre">							</span>#函数调用
输出为:

>>> 
你好我是王尼玛
def squareSum(a,b):<span style="white-space:pre">					</span>#带形参的函数定义(a,b即为形参)
    c = a**2 + b**2                                     #a**2表示a的平方
    return c<span style="white-space:pre">						</span>#将c的值返回,与java不同的是,<span style="color:#ff6666;">Python可以返回多个值,且以元组的形式返回</span><pre name="code" class="python" style="color: rgb(255, 102, 102);">
print(squareSum(3,2)) #函数调用,将数值3,2带入函数
输出为:
13

2.1带默认形参的函数

我们可在定义形参的时候直接给参数加一个默认值。值得注意的是带有默认值的形参要放在右边。比如“def say(message, times = 1):”是正确的而“def say( times=1 ,message):”是错误的!
def say(message, times = 1):
    print ((message+" ") * times)         #字符串可以通过+号连接

say('Hello')
say('World', 3)
输出结果
Hello 
World World World 

2.2关键参数赋值

再调用函数的时候,我们可以直接通过形参名给形参赋值
def func(a, b=2, c=3):
    print ("a、b、c的值分别为",a,b,c)    

func(1,3)
func(1, c=24)
func(c=50, a=100)
输出
a、b、c的值分别为 1 3 3
a、b、c的值分别为 1 2 24
a、b、c的值分别为 100 2 50

*2.3 文档字符串

在函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类(虽然还没学到那.....技术分享)。文档字符串主要用于给函数示意。
def sayHi():    """ 这个函数的作用是王尼玛勾搭妹子问候语"""    #只能通过三引号的行出,用井号不行    """本条语句也是不能作为函数字符串的!"""    print("你好我是王尼玛")<span style="white-space:pre">				</span>sayHi()print(sayHi.__doc__)                          #函数名后不需要括号,doc两边的是双下划线help(sayHi)                                   #<span style="color:#ff0000;">内置的help函数其实就是读取的doc</span>
输出
你好我是王尼玛 这个函数的作用是王尼玛勾搭妹子问候语Help on function sayHi in module __main__:sayHi()    这个函数的作用是王尼玛勾搭妹子问候语


3.局部变量

        定义在函数内部的变量叫做局部变量,不管局部变量的值在函数内部如何变化,都不会影响到函数外的同名变量。即变量名称对于函数来说是局部 的。这称为变量的作用域 。所有变量的作用域是它们被定义时所在的块。
a = 1

def changeNum(a):                               #整数变量传递给函数,函数对它进行操作,但原整数变量a不发生变化。
    a = a + 1
    return a

print ("函数返回值为",changeNum(a))
print ("a的值为",a)
输出结果:

函数返回值为 2
a的值为 1

4.使用global语句

如果你想要在函数外为一个定义在函数内的变量赋值,那么你就得通过global语句告诉Python这个变量名不是局部的,而是全局的。
def func():
    global x

    print ("函数中x的值为",x)
    x = 2
    return x

x = 50                                              #在函数外为一个定义在函数内的变量赋值
print ('x的值为', x)
print("函数返回值为",func())
输出结果
x的值为 50
函数中x的值为 50
函数返回值为 2



小提示:

1.指针传递使函数可以改变函数外的值!

对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递
但是对于列表来说,列表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递
b = [1,2,3]

def changeList(b):                              #我们将一个表传递给函数,函数进行操作,原来的表b发生变化。
    b[0] = b[0] + 1
    return b

print ("函数返回值为",changeList(b))
print (<span style="font-family: Arial, Helvetica, sans-serif;">"b的值为",</span><span style="font-family: Arial, Helvetica, sans-serif;">b)</span>

输出结果:

函数返回值为 [2, 2, 3]
b的值为 [2, 2, 3]

2.Python可以返回多个值,以元组的形式返回

def idSave():
    a=input("姓名为:")
    b=input("年龄为:")
    c=input("性别为:")
    return a,b,c

print(idSave())
输出结果:
姓名为:王尼玛
年龄为:12
性别为:女
('王尼玛', '12', '女')

3.带有默认值的形参

我们可在定义形参的时候直接给参数加一个默认值。值得注意的是带有默认值的形参要放在右边


Python菜鸟学习手册06----函数