Python中关于函数问题的详细分析

所谓的函数其实就是一个方法,就类似于我们在生活当中使用的模板模具。

def test():
  print('大家好')
test()

在此函数中,test是一个方法,或者说是函数。test()就是一个调用的方法。点击运行,输出结果为:大家好。

def test(name):
    print('Hello,'+name)
test('小王')

点击运行,输出结果为:Hello,小王。

在函数中,分为实参和形参,在该函数中,test(name),test这是一个函数,name是一个形参。形参就是完成工作所需的一项信息。

test('小王'),调用了test的这个函数,小王是个实参,实参就是调用这个函数的时候传递给函数的信息,name就等于小王。

小王这个值存储到了name当中。

1.无参数无返回值。

def  test():
    print('大家好,我是小明')
test()

这个就是无参数无返回值的形式,这也是最简单最基本的结构函数。没有参数(形参,实参),也没有返回值。或者可以把它的实参或者形参都看做空。

2.有参数无返回值。

def test(fond):
    print('我喜欢去{}'.format(fond))
    print('我喜欢去'+fond)
test('打篮球')
test('游泳') 

点击运行,输出结果为,我喜欢去打篮球  我喜欢去打篮球  我喜欢去游泳 我喜欢去游泳 ,在这个函数中有形参与实参。而且可以调用函数多次。

def test(eat,fond):
    print('比起吃鸡肉,我更喜欢吃'+eat)
    print('我最喜欢去'+fond)
test('牛肉','唱歌')
test('唱歌','牛肉')

点击运行,输出结果为:比起吃鸡肉,我更喜欢吃牛肉;   我最喜欢去唱歌 ; 比起吃鸡肉,我更喜欢吃唱歌 ;  我最喜欢去牛肉。此函数有两个形参,所以我们需要传进去两个实参,但是切记实参之间的位置切勿写乱,否则结果就会像第二次输出的一样感觉搞笑了。

3.无参数有返回值。

def test():
    love='小美'
    return love
result=test()
print(result)
print(test())

点击运行,输出结果为:小美;小美。在此函数中,没有参数,有一个return,返回的意思,只能应用于函数中,test()调用函数,得到love=‘小美’,return又返回到love值上。love=‘小美’ ,返回的值为小美,输出的话,可以用这两种方法输出。

def test():
    love='小丽'
    print('我的爱人是'+love)
    return
    print('我喜欢'+love)       #不执行
test()

点击运行,输出的结果是:我的爱人是小丽。而return下面的一段代码则不会执行。

return 有截断返回的意思,return给一个返回值,下面的代码便统统不会执行。

4.有参数有返回值。

def num(a):
    return a
print(num(3))

点击运行,输出结果为3,此函数有参数,有返回值。

def num(a,b):
    return a+b
print(num(10,33))

点击运行,输出结果为:43。可以做一些小的运算工作。

def num (a,b,c,d,e,f):
    info= a+d+f
    return info
print(num(8,5,6,9,3,4))

点击运行,输出结果为:21。虽然此函数中有六个参数,但在过程中,程序只用到了a,d,f三个参数,对应的分别是8,9,4。

最后运算得出结果。

5.默认参数。

def test(name,age='16',fond='打游戏'):
    print('那个孩子叫'+name,'他今年'+age,'每天'+fond)
test('小明')
test('小明','20','打篮球')

点击运行,输出结果为:那个孩子叫小明 他今年16 每天打游戏;那个孩子叫小明 他今年20 每天打篮球。此函数中,在设置形参age,fond的时候我们给了它一个值,这个值叫做默认值,这个参数叫做默认参数。默认参数可以随意设置。但是要注意,默认参数要放到末尾。当形参只有一个小明的时候,输出的结果就是他的默认参数,年龄16,爱好打游戏。当形参写成 小明,20,打篮球的时候,默认的值便不起作用,会输出你传入的值,年龄20,爱好打篮球。

6.关键参数。

其实关键参数和默认参数的差别不是特别大,我们来仔细的研究一下

def test(name,age='16',fond='打游戏'):
    print('那个孩子叫'+name,'他今年'+age,'每天'+fond)
test('小明',fond='跑步')         
test(age='28',name='小华',fond='工作')

点击运行,输出结果为:那个孩子叫小明 他今年16 每天跑步;那个孩子叫小华 他今年28 每天工作。关键参数的要点在于,在调用的时候,写出形参的名字,然后给它赋值,这个就是关键的参数,顺序可以随便写,就像第二种调用。

7.*args的用法。

def fun(*args):
    print(args)
fun('吃饭')
fun('吃饭',110,[1,2,3],{'name':'小明'})

点击运行,输出结果为:('吃饭',);('吃饭', 110, [1, 2, 3], {'name': '小明'}),*args的用法就是会输出一个元组,里面什么都可以存放。

def fun1(a,b=0,*args,**kwargs):    #kwargs:当实参中有类似与fond=’打游戏‘这种样式的会自动收集,并放入字典中。
    print(a)
    print(b)
    print(args)
    print(kwargs)
fun1('小明',10,'aaa',fond='打游戏')

点击运行,输出结果为:小明;10;('aaa',);{'fond': '打游戏'}。

8.函数if判断,返回值。

def isOpen(open):
    if open==True:
        print('灯已经开着了')
        return
    print('请打开灯')
isOpen(True)

点击运行,输出结果为:灯已经开着了。当isOpen(False)的时候,会输出,请打开灯,这是return和if判断结合的一个小例子。

9.高级函数的应用。

【1】

space='--'
word='hello world'
print(space.join(word))

点击运行,输出结果为:h--e--l--l--o-- --w--o--r--l--d,这是我们用之前说过的python内部的函数进行操作。那么怎么用人建函数来实现呢?

def test(content,space):
    print(space.join(content))
test('hello world','--')

点击运行,输出结果为:h--e--l--l--o-- --w--o--r--l--d。这就是我们用人建的函数来实现插入。

【2】map的用法。

def fun(num):
    print('他的考试成绩是'+num)
list(map(fun,['79','86','92','61']))

点击运行,输出结果为:他的考试成绩是79;他的考试成绩是86;他的考试成绩是92;他的考试成绩是61。map里面需要两个值,第一个值必须为函数。第二个值是一个序列。map的用法和for循环十分的相似。依次处理序列里面的所有元素,ba序列里面的每个元素单独的放在函数里面去执行。

【3】reduce的用法

首先需要先引进一个包,from funtools import reduce

def count(index1,index2):
    return index1+ index2
result=reduce(count,[1,2,3,4,5])
print(result)

点击运行,输出结果为:15。可能你还会不太明白,reduce在函数中起到了什么作用。

def new_reduce(value1,value2):
    return value1+'的好朋友是'+value2+'.'
result=reduce(new_reduce,['1','2','3','4'])
print(result)

点击运行,输出结果为:1的好朋友是2.的好朋友是3.的好朋友是4.。看到这个输出,就应该明白,reduce 它会将序列里面所有的元素操作两次,步骤是,将前面的两个值进行处理,然后这个值再和第三个值进行处理,处理的结果再和下一个值进行处理。所以上方那个程序的实现步骤就是,1+2=3,3+3=6,6+4=10,10+5=15。

【4】匿名函数lambda

result=lambda x,y:x+y
print(result(5,6)

点击运行,输出的结果为11;lambda表示该函数为匿名函数,匿名函数后面的x,y,代表接收的函数,:x+y表示要返回x+y的值。

list1=[1,11,56,24,99,65,46]
list1=sorted(list1,key=lambda x:x)
print(list1)

点击运行,输出结果为:[1, 11, 24, 46, 56, 65, 99]。使用匿名函数进行排序,默认的是正序,reverse=False。想获取反序排列的话:

list=sorted(list,key=lambda x:x,reverse=True)。

10.局部变量与全局变量。

全局变量:所有函数之外定义的变量。

局部变量:函数内部定义的变量 或者代码块里的变量

函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。即使声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,那么局部变量名字会覆盖全局变量名字。

num = 100
def fun():
    new_value = 123   #一个全新的局部变量newValue
    print(new_value)
fun()               #输出局部变量newValue 即新的局部变量

点击运行,输出的结果为:123。

num = 100
def fun():
    num= 123  #声明一个全新的局部变量num,虽然名字和外界的全部变量相同 但是是新的一个变量且是局部有效的。屏蔽了外面的同名的全部变量
    print(num)
fun()  #输出局部变量num=123 即新的局部变量。

点击运行,输出的结果为:123。

num = 100
def fun():
    num= 123 
    print(num)
fun() 
print(num)  #输出的是最外层全局的值,并不是局部的值

点击运行,输出结果为:123,100。

在局部变量修改全局变量:

num = 100
def fun():
    global num  #声明这个num是全局的,如果全局变量已经有这个num变量那就是指的它 如果全局没这个num那就新定义一个全局变量。
    num  = 123  #凡是在函数内部num的意思始终是指全局变量
    print(num )
fun()
print(num )   #输出123 说明修改的就是全局变量啊

点击运行,输出结果为:123;123.

如果不是明显要局部变量和全局变量,能不纠缠就不纠缠。也就是定义变量名字的时候 ,要严格规范一下,避免这些不必要的问题。

猜你喜欢

转载自blog.csdn.net/qq_42543244/article/details/81103630
今日推荐