zoukankan      html  css  js  c++  java
  • Python3学习之路~3.1 函数基本语法及特性、返回值、参数、局部与全局变量

    1 函数基本语法及特性 


    定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

    特性:

    1. 减少重复代码
    2. 使程序变的可扩展
    3. 使程序变得易维护

    语法定义:

    1 def sayhi():#函数名
    2     print("Hello, I'm nobody!")
    3  
    4 sayhi() #调用函数

    可以带参数

     1 #下面这段代码
     2 a,b = 5,8
     3 c = a**b
     4 print(c)
     5  
     6  
     7 #改成用函数写
     8 def calc(x,y): #x、y是形参
     9     res = x**y
    10     return res #返回函数执行结果
    11  
    12 c = calc(a,b) #a、b是实参,结果赋值给c变量
    13 print(c)

     

    2 返回值


    要想获取函数的执行结果,就可以用return语句把结果返回

    注意:

    1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
    2. 如果未在函数中指定return,那这个函数的返回值为None
    def test01():
        pass
    
    def test02():
        return 0
    
    def test03():
        return 3,'hello',['Amy','Bob'],{'name':'Alex','age':21}
    
    t1=test01()
    t2=test02()
    t3=test03()
    
    print('from test01 return is [%s]:'%type(t1),t1)
    print('from test02 return is [%s]:'%type(t2),t2)
    print('from test03 return is [%s]:'%type(t3),t3)
    
    # 输出:
    # from test01 return is [<class 'NoneType'>]: None
    # from test02 return is [<class 'int'>]: 0
    # from test03 return is [<class 'tuple'>]: (3, 'hello', ['Amy', 'Bob'], {'name': 'Alex', 'age': 21})
    View Code

    总结:

    • 返回值数=0:返回None
    • 返回值数=1:返回object
    • 返回值数>1:返回tuple

     

    3 函数参数


    1.形参和实参

    形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体时使用形参,目的是在函数调用时接收实参(实参个数、类型应与形参一一对应)。

    实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

    区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。

    2.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

    正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。

    def test(x,y):
        print(x)
        print(y)
    
    test(1,2) #位置参数:实参与形参位置一一对应
    test(y=2,x=1) #关键字参数:与形参位置无关
    test(1,y=2) #混用:关键字参数必须放在位置参数之后
    #test(y=2,1) #报错

    3.默认参数

    默认参数在调用时不指定,那就是默认值,指定了的话,就用你指定的值。

    特点:调用函数时,默认参数非必须传递。

    def test(x,y=2):
        print(x)
        print(y)
    
    test(1) #不指定默认参数
    test(1,5) #指定默认参数

    4.参数组(非固定参数)

    若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

     *args:接收 0-N 个位置参数,转换成元组形式

    def test1(*args):
        print(args)
    
    test1(1,2,3,4,5,6) # 输出:(1, 2, 3, 4, 5, 6)
    test1(*[1,2,3,4,5,6]) # 同上
    
    def test2(x,*args):
        print(x,args)
    
    test2(1,2,3,4,5,6) # 输出:1 (2, 3, 4, 5, 6)
    test2(1) # 输出:1 () ,后面这个()就是args,只是因为没传值,所以为空

    **kwargs:接收 0-N 个关键字参数,转换成字典的形式

    def test1(**kwargs):
        print(kwargs)
    
    test1(name='Alex',age=21,sex='M') # 输出:{'name': 'Alex', 'age': 21, 'sex': 'M'}
    test1(**{'name':'Alex','age':21,'sex':'M'}) # 同上
    test1() #输出:{}
    
    def test2(name,**kwargs):
        print(name,kwargs)
    
    test2('Alex',age=21,sex='M') # 输出:Alex {'age': 21, 'sex': 'M'}
    test2('Alex') # 输出:Alex {}
    
    def test3(name,age=21,**kwargs):
        print(name,age,kwargs)
    
    test3('Alex',sex='M',hobby='singing',age=18) # 输出:Alex 18 {'sex': 'M', 'hobby': 'singing'}

     

    4 局部变量与全局变量


    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
    #像字符串,数字等类型的变量不可以在局部修改其值
    name = "Alex"
    
    def change_name(name):
        print("before change:", name) # Alex
        name = "alex"
        print("after change", name) # alex
    
    change_name(name)
    print( name) # Alex
    
    #像列表、字典、集合、类等类型的变量可以在局部修改
    names=['Amy','Bob','Cindy']
    def change_name(names):
        print("before change:", names) # ['Amy', 'Bob', 'Cindy']
        names[0] = "Alex"
        print("after change", names) # ['Alex', 'Bob', 'Cindy']
    
    change_name(names)
    print( names) # ['Alex', 'Bob', 'Cindy']
    View Code
  • 相关阅读:
    java socket解析和发送二进制报文工具(附java和C++转化问题)
    hibernate缓存机制(二级缓存)
    Spring MVC中前后台数据传输小结
    NUC972 MDK NON-OS
    代码是如何控制硬件的?
    C语言位运算+实例讲解(转)
    C语言程序真正的启动函数
    51单片机的时钟及总线时序和总线扩展
    如何通过Keil将程序正确的下载进flash中
    说说M451例程讲解之串口
  • 原文地址:https://www.cnblogs.com/zhengna/p/9198733.html
Copyright © 2011-2022 走看看