python基础——函数

在编程过程中可以定义自己想要实现的功能的函数,语法如下:

def 函数名(参数列表):    #函数名可以随意编写,但最好不要与内置函数重复,不然内置函数将被替换成你所定义的函数
    函数体 

例:

def f(a,b,c,d):
    return a,b,c,d
c=f(1,2,3,4)
print(c)
c,d,x,y=f(1,2,4,3)
print(c,d,x,y)

输出结果:

(1, 2, 3, 4)
1 2 4 3

例:

def test(x):                    #参数列表里的参数为形参
    x=10
    print('-----',x)
x=5                             #这里的x为实参,虽然与形参一样,但是却是不同的两个值
test(x)
print('--+--',x)

输出结果:

----- 10
--+-- 5

可变参数和不可变参数:

在之前的学习中,我们知道不可变类型为:字符串、元组和数值;可变类型为:列表、字典、集合。在函数中对不可变参数重新赋值后,函数的输出结果则会输出新赋值,而对可变参数中的某个元素重新赋值后,可变参数本身没有动,只是将内部元素进行了修改。

例:

def a(x):
    x=10
    print(x)
s=1
a(s)
def b(y):
    y[2]=14
    print(y)
k=[1,2,3,4,5,6]
b(k)

输出结果:

10
[1, 2, 14, 4, 5, 6]

函数的参数主要分为五个类型:必需参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必需参数、默认参数、可变参数/命名关键字参数和关键字参数。

例:

def f2(a, b, c=0, *e, x, d,**k):
    print('a =', a, 'b =', b, 'c =', c, 'e=', e,'x=',x,'d=',d,'k =', k)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f2(*args,**kw) 

输出结果:

a = 1 b = 2 c = 3 e= (4,) x= # d= 99 k = {}

必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

例:

#可写函数说明
def printme( str ):
   print (str)
   return
 
#调用printme函数
printme( str = "hello")

输出结果:

hello

默认参数

调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

例:

#可写函数说明
def printinfo( name, age = 35 ):
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=30, name="Leo" )
print ("------------------------")
printinfo( name="Leo" )

输出结果:

名字:  Leo
年龄:  30
------------------------
名字:  Leo
年龄:  35

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

例:

#可写函数说明
def printinfo( name, age ):
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=30, name="Leo" )

输出结果:

名字:  Leo
年龄:  30

不定长参数

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

def a(*args):    #主要区别为加了‘*’符号
    函数体
    return

例:

# 可写函数说明
def printinfo( arg, *args ):
   print ("输出: ")
   print (arg)
   for i in args:
      print (i)
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )

输出结果:

输出:
10
输出:
70
60
50

全局变量和局部变量

全局变量

在一个模块中最高级别的变量有全局作用域,除非被删除,否则能存活到程序运行结束。所有函数都能访问全局变量。

局部变量

定义在函数内的变量有局部作用域。

依赖于定义变量的函数现阶段是否处于活动状态。

调用函数时,局部变量产生,暂时存在。

一旦函数执行完,局部变量将会被释放。

注:

同一个函数中,不允许有同名局部变量

不同函数中,可以有同名局部变量

同一个程序中,全局变量和局部变量同名时,局部变量具有更高的优先级


例:

total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
    #返回2个参数的和."
    total = arg1 + arg2 # total在这里是局部变量.
    print ("函数内是局部变量 : ", total)
    return total

#调用sum函数
sum( 10, 20 )
print ("函数外是全局变量 : ", total)

输出结果:

函数内是局部变量 :  30
函数外是全局变量 :  0

但是有时候我们想要函数中修改外部作用域的变量时,就需要global方法来实现了。

例:

num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num) 
    num = 2
    print(num)
fun1()

输出结果:

1
2




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值