• 函数参数/局部变量与全局变量/前向引用(函数即变量)


    '''
    函数参数
    1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能
    再使用该形参变量。
    2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,
    输入等办法使参数获得确定值。
    3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
    4.默认参数
    5.参数组
    '''
    
     
    
    
    def calc(x, y):
      """这是函数描述"""
      res = x ** y
      return res
    
    msg = calc(2, 3)
    print(msg)
    
    
    def test(a, b, c):
      """这是函数描述"""
      print(a)
      print(b)
      print(c)
    
    test(1, 3, 2) #位置参数,必须一一对应,缺或多参数都不行
    test(c=4, a=8, b=6) #关键字参数,无须一一对应,缺或多参数都不行
    test(10, c=11, b=12) #位置参数和关键字参数混搭,位置参数必须在关键字参数左边
    
     
    
    def handle(x, typle='mysql'):
      """这是函数描述"""
      print(x)
      print(typle)
    
    # handle('hello')
    handle('hello', 'Nosql')
    
     
    
    #参数组:**字典,*元组
    def test01(x, *args): #可处理多余的位置参数
      print(x)
      print(args)
      print(args[4])
    
    # test01(1, 2, 3, '4', 5, [6, '7'])
    # test01(1, 2, 3, '4', 5, *[6, '7']) #列表元组前加*号,可把列表元组里的元素逐一添加
    # test01(1, 2, 3, '4', 5, *(6, '7'))
    
     
    
    def test02(y, **kwargs): #可处理多于的关键字参数
      print(y)
      print(kwargs)
    
    # test02(2, q=1, w='2', e=[3, '4', (5, '6')])
    # test02('3', **{'name':'alex', 'age':18, 'qq':'123321'}) #字典前加**号,可直接把key及对应value值逐一添加
    # tesst02(4, z=3, z=4) #会报错:一个参数不能传两个值
    
     
    
    def test03(z, *args, **kwargs): #两个参数组位置固定,因为涉及到传入实参的顺序问题,位置参数必须在关键字参数前面
      print(z)
      print(args)
      print(kwargs)
    
    test03(1, 2, 3, *['4', 5], name='alex', age=18, **{'name1':'mike', 'age1':19})
    
     
    
    
    '''
    局部变量与全局变量
    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
    全局变量变量名大写,局部变量变量名小写;
    '''
    
     
    
    name = 'lhf'
    
    def change_name():
      """全局变量的引用"""
      print('我的名字%s!' % name)
    
    change_name()
    
     
    
    def change_name1():
      """当全局变量与局部变量同名时"""
      name = '帅哥'
      print('我的名字%s!' % name)
    
    change_name1()
    print(name)
    
     
    
    def change_name2():
      """global关键字定义全局变量,并作更改"""
      global name
      name = 'alex'
      print('我的名字%s!' % name)
    
    change_name2()
    print(name)
    
     
    
    # 解释器从上到下执行,遇到函数,默认内部不执行,只进行编译
    NAME = '海风'
    
    def huangwei():
      name = 'huang'
      print(name)
    
      def liuyang():
    
        '''nonlocal关键字定义上一级局部变量,并作更改'''
        nonlocal name
        name = 'liu'
        print(name)
      def nulige():
        print(NAME)
      nulige()
      liuyang()
      print(name)
    
    huangwei()
    
     
    
    
    '''前向引用'''
    
    # def foo():
    #    print('from foo')
    #    bar()
    
    # foo() #name 'bar' is nor defined
    
    # def bar():
    #    print('from bar')
    # 在定义foo()函数之后bar()函数定义之前会报错,因为调用foo()函数的时候bar还未定义
    
    # def foo():
    #    print('from foo')
    #   bar()
    
    # def bar():
    #   print('from bar')
    
    # foo()
    # 在定义foo()和bar()之后调用foo(),虽然foo()定义在bar()之前,且调用了bar(),但是在python中,若不执行函数,函数并不会执行,且在调用之前已经定义了bar(),所以不会报错,这就是前向引用
    while True: print('studying...')
  • 相关阅读:
    Android笔记之调用系统相机拍照
    Android笔记之RoundedImageView
    Java笔记之public、protected、default和private
    Android笔记之ExpandableListView(悬浮吸顶Demo)
    Android笔记之Fragment中创建ViewModel的正确方式
    Android代号、版本及API级别之间的对应关系
    【Phabricator】教科书一般的Phabricator安装教程(配合官方文档并带有踩坑解决方案)
    【Ansible】记一次技术博客害死人的经历——ansible模板变量注入探究
    【linux杂谈】遇到REMOTE HOST IDENTIFICATION HAS CHANGED怎么办?
    【linux杂谈】在SSH连接中,openssh如何解决'Connection refused'错误?
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14420431.html
Copyright © 2020-2023  润新知