Python函数与模块-函数定义与使用

一.函数定义与使用

   1.函数定义

      Python中函数的定义与声明是视为一体的。

      def 函数名(函数参数):

            函数体

            return 表达式或值

      注:

           =>Python中变量是弱类型的,Python会自动根据值来维护其类型。所以不用指定返回值及函数参数的类型

           =>若没有return语句,则自动返回None;如果有return语句但return后没有接表达式或值,则也返回None

           =>Python中可以返回多个值,将多个值放在一个元组或者其他类型的集合中来返回。 如:return (x,y)

           =>参数的传递是值传递,一般情况下,修改形参不会影响实参

   2.lambda表达式

      lambda表达式可以用来声明匿名函数

      匿名函数:没有函数名字的临时使用的函数,只可以包含一个表达式,且表达式的结果为函数返回值;

                        不允许包含其他复杂的语句,但在表达式中可调用其他函数

      lambda 函数参数:表达式

      (1)函数的列表:将lambda表达式作为列表的元素,从而实现跳转表的功能

                L=[(lambda 表达式1),(lambda 表达式2),...]

                调用方法:L[索引](lambda表达式的参数列表)

      (2)lambda作为函数返回值

               

"""
定义一个math():
k=1,返回计算加法的lambda表达式;
k=2,返回计算减法的lambda表达式;
k=3,返回计算乘法的lambda表达式;
k=4,返回计算除法的lambda表达式;
"""
def math(k):
    if k==1:
        return lambda x,y:x+y
    elif k==2:
        return lambda x,y:x-y
    elif k==3:
        return lambda x,y:x*y
    elif k==4:
        return lambda x,y:x/y

action=math(1)
print("10+2=",action(10,2))
action=math(2)
print("10-2=",action(10,2))
action=math(3)
print("10*2=",action(10,2))
action=math(4)
print("10/2=",action(10,2))

3.几种在函数内部修改实参值的情况

def modify(m,K):
    m=2
    K[0]=0
    return 
n=100
L=[1,2,3]
modify(n,L)
print(n)
print(L)

     n=100

     L=[0,2,3]

def modify2(v,item):
    v.append(item)
a=[2]
modify2(a,3)
print(a)

    a=[2,3]

def modify3(d):
    d['age']=18
a={'name':'cxy','age':22,'sex':'Female'}
print(a)
modify3(a)
print(a)

    a={'name': 'cxy', 'age': 18, 'sex': 'Female'}

4.函数参数类型

   =>默认值参数

def display(a='Hello',b='World'):    #默认值参数能够给函数参数提供默认值
    print(a+b)
display()
display(b='world')                   #指定b的值
display(a='hello')                   #指定a的值
display('world')                     #未指定'world'传给a还是b,则默认从左向右匹配,即传给a
#HelloWorld
#Helloworld
#helloWorld
#worldWorld

   =>关键字参数

       位置参数:参数通过位置进行匹配,从左到右依次匹配,对参数位置和个数都有严格要求

       关键字参数:通过参数名字来匹配,不需要严格按照参数定义时的位置来传递参数

                             如:display(a='hello')

   =>任意个数参数

       一般情况下定义函数时,函数参数个数确定,然而某些情况下不能确定参数个数,只需在参数前面加上‘*’或者'**'

      =>'*'表示将没有匹配的值都放在同一个元组中

def storename(name,*nickName):
    print('real name is %s'%name)
    for nickname in nickName:
        print("小名 ",nickname)
storename('张海')
storename('张海','小海')
storename('张海','小海','小豆豆')
#real name is 张海
#real name is 张海
#小名  小海
#real name is 张海
#小名  小海
#小名  小豆豆

      =>表示将没有匹配的值都放在一个字典中

def demo(**p):
    for item in p.items():
        print(item)
demo(x=1,y=2,z=3)
#('x', 1)
#('y', 2)
#('z', 3)

5.变量作用域

   =>局部变量

       局部变量在函数内部定义的变量,旨在该函数内部起作用。

       与函数外具有相同名的其他变量没有任何关系-变量名称对于函数来说是局部的

   =>全局变量

       全局变量在函数外部定义,并且可以直接在函数中使用。

       若要在函数内部改变全局变量值,必须使用global关键字进行声明

x=2
def fun1():
    print(x,end=" ")
def fun2():
    global x
    x=x+1
    print(x,end=" ")
fun1()
fun2()
print(x,end=" ")
#2 3 3 

       注 =>若在函数内部直接将一个变量声明为全局变量,在函数外没有定义,则在调用该函数后,将变量增加为新的全局变量

            =>若一个局部变量和一个全局变量重名,则局部变量会“屏蔽”全局变量,局部变量起作用

 

 

你可能感兴趣的:(Python,Python)