ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

函数和参数概念

2021-11-15 19:01:49  阅读:111  来源: 互联网

标签:index 函数 概念 参数 func 实参 def


函数和参数概念

函数参数的两大分类

形式参数
   在函数定义阶段括号内所填写的参数  简称'形参'
       def func(a, b):
      pass
       # a和b就是函数func的形参
实际参数
在函数调用阶段括号内传入的参数  简称'实参'
func(1, 2)
# 数据1和2就是函数func的实参
"""
形参与实参的关系
我们可以将形参看成是变量名 实参看成是变量值
两者在函数调用阶段临时绑定 函数运行结束断开

形参的表现形式只有一种就是变量名
实参的表现形式有很多种(但是把握核心 就是 数据值)
"""

位置参数

位置参数
按照从左往右的顺序依次填入的参数
位置形参
在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
位置实参
在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
   
# 定义一个可以比较大小的函数(传入两个值 返回较大的)


关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值的形式指明道姓的传值
"""
1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
2.位置参数在绑定的时候多一个不行少一个也不行
"""

"""格式越简单的越靠前 格式越复杂的越靠后"""

默认参数

默认参数
默认形参
  函数在定义阶段就可以给形参赋值了
      1.该形参在函数调用阶段如果不给值 则使用默认的
           2.该函数在函数调用阶段也可以继续给值则使用你给你
     
定义学员注册功能
   def register(name, age, gender='male'):
  print('%s:%s:%s' % (name, age, gender))
   register('jason', 18)
   register('tony', 28)
   register('kevin', 38)
   register('lili', 18, 'female')
   register('lili', 18, gender='female')

"""
位置形参与默认值形参在定义的时候
位置形参必须在默认值形参的前面
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''

可变长参数

# 1.函数无论传入多少位置参数都可以正常运行
# 可变长形参
def func(x,y,*a)
prthon(x,y,a)
#func()   # ()
#func(1)   #(1,)
# func(1, 2, 3, 4, 5, 6, 7) # (1, 2, 3, 4, 5, 6, 7)
# func(1,2) # 1 2 ()
# func(1,2,3,4,5,6,7,8,9) # 1 2 (3, 4, 5, 6, 7, 8, 9)
# func(1,2) # 1 2 (3, 4, 5, 6, 7, 8, 9)#  
"""
*号在形参中使用
用于接收多余的位置参数 并组织的形式赋值给*号后面的变量名
"""
   

2.函数无论传入多少关键字参数都可以正常运行
def index(x, y, **b)
print(x, y, b)
index()    # {}
index(a=1, b=2, c=3, d=4)      # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
index(y=2, x=1)    # 1 2 {}
index(y=2, x=1, u=222, k=111,l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}
"""
*号在形参中的使用
用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
"""
3.定义一个函数无论传入多少位置参数和关键字参数都正常运行
def index(*a, **b)
print(a,b)
index()        # () {}
index(1, 2, 3, 4)     #(1, 2, 3, 4){}
index(a=1, b=2, c=3)  #(){'a':1, 'b':2, 'c':3}
index(1, 2, 3, 4, a=1, b=2, c=3)  #(1, 2, 3, 4){'a':1, 'b':2, 'c':3}
"""
墨守成规
可变长形参 *与**后面的变量名其实是可以随便定义的
但是python中推荐使用
  *args
  **kwaegs
def index(*args, **kwargs)
pass
"""

def index(a, b, c)
print(a, b, c)
new_list = [11,22,33]
index(new_list)   # 肯定不行 列表是一个整体 相当于一个实参
index(new_list[0], new_list[1],new_list[2])  # 可以
'''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入'''
def index1(*args)
   print(args)
new_list1 = [11,22,33,44,55,66,77,88,99]
index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)
"""
*号在实参中的使用
会将列表、元组内的元素打散成位置参数的形式一一传值
"""

def index2(**kwargs)
print(kwarges)
new_dict = {'username':jason, 'pwd':123}
index2(**new_dict)  # index2(username='jason', pwd=123)
{'username':'jason', 'pwd':123}
"""
**号在实参中使用
会将字典内的键值对打散成关键字参数传入
"""
   

名称空间

什么是名称空间(namespaces)
用于存放变量名与变量值绑定关系的地方(类似于民政局)

名称空间的分类
1.内置名称空间
python解释器提前给你定义好的
  print()
       len()
      ...
2.全局名称空间
在py文件中顶格编写的代码运行之后都会存入全局名称空间
  name = 'jason'    # name 全局
       def func():       # func 全局
           pass
       if 1:
           a = 123     # a全局
       for i in range(10):
           print(i)     #i全局
       while True:
      a = 123      # a全局
3.局部名称空间
函数体代码运行之后产生的都是局部名称空间
   
# 存活周期
1.内置名称空间
  python解释器启动与关闭而创建和销毁
   2.全局名称空间
  随着py文件的运行与结束而创建和销毁
   3.局部名称空间
  随着函数体代码的执行与结束而创建和销毁

名字的查找顺序

# 在查找名字的时候 要先确定自己当前在哪
1.如果你在局部
  局部 >>> 全局 >>> 内置
   2.如果你在全局
  全局 >>> 内置
   
# 局部名称空间的嵌套
'''函数在定义阶段名字的查找顺序就已经固定死了(特例)'''
x = 111
def f1():
   x = 222
   def f2():
       x = 333
       def f3():
           x = 444
           def f4():
               x = 555
               print(x)
               # x = 555 特例
           f4()
       f3()
   f2()
# 通过调用f1 执行所有的函数
f1()

 

标签:index,函数,概念,参数,func,实参,def
来源: https://www.cnblogs.com/ygm980325/p/15557737.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有