函数的参数与嵌套使用

函数的使用:先定义后使用 #与变量的定义相似
x=1 变量名==函数名
def func(): 值 == 函数值
print(‘hello world‘)

定义阶段: 只检测语法,不执行代码/

return返回值类型:
效果:只能返回一次值,终止函数的执行
无return 默认 None return返回值:如果只有一个则返回本身,多个值则为元组形式

形参<形式上存在,而实际不存在,变量名>与实参<实际存在,变量值>:
def foo(x,y):
return x+y

foo(1,2)

位置参数:按照从左到右的顺序依次定义的参数
def foo(x,y):
return x+y #按位置定义的形参必须传值,多一个不行,少一个不行

foo(1,2,3) #按位置定义的实参,与形参一一对应

关键词实参数:实参在定义时,按key=value形式定义
def foo(x,y):
print(x)
print(y)
foo(y=10,x=1) #关键词参数不受位置影响,不像位置实参与形参那样一一对应

注意:位置实参必须在关键字实参前面
既可以用位置实参又可以是关键词实参《实参的形式》,但是一个形参只能被传值一次

默认参数<形参>:定义阶段有值,默认阶段无值
def foo(x,y=10):
print(x)
print(y)

#形参的应用:值经常变化定义为位置形参,值大多数情况不变则可定义为默认实参
默认参数通常定义为不可变类型
默认参数只在被定义时赋值一次
注意:默认参数必须放在位置形参后面

可变长参数:指实参的个数不固定
#按位置定义的可变长度的实参:* #()元组形式保存 *等同于位置参数
#按关键字定义的可变长度的实参:** #{}字典格式保存
def func(x,y,*args): #x=1.y=2,args=(3,4,5,6)
print(x,y)
print(args)
fuc(1,2,3,4,5,6)

命名关键字参数:
定义在*后的形参,此类形参必须被传值,而且要求实参必须以关键字的形式传入

def register(name,age,**kwargs):
print(kwargs)

register(name=‘jason‘,age=18)

函数嵌套调用:
函数内部调用另外一个函数

函数嵌套定义:
def f1():
def f2():
def f3():...

def f1():
    def f2():
        def f3():
            print(‘f3‘)
        print(‘f2‘)
        f3()
    print(‘f1‘)
    f2()
f1()

名称空间: cmd/python/import this 最后一行有提示
存放名字与值的绑定关系
分三种:<加载顺序由上到下>
内置名称空间:python解释器自带的名字 ,解释器启动就生成这个空间

全局名称空间:文件级别定义的名字都会存放在全局名称空间,执行python文件时产生
不是内置定义的也不是函数内部的就是全局
局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效
def func(x,y):
z=3
加载顺序:内置名称空间>>>全局名称空间>>>>局部名称空间
取值:局部名称空间>>>全局名称空间>>>>内置名称空间

作用域:作用范围 ---->在定义阶段,作用域就固定死了。
分两种:
全局作用域:包含内置名称空间与全局名称空间的名字属于全局范围,
在整个文件的任意位置都能被引用,全局有效

局部作用域:局部名称空间属于局部范围,
只在函数内部可以被引用,局部有效。

局部作用域------>全局作用域

函数是第一类对象:指的是函数可以被当作数据传递
可被引用
可当作函数的参数
可以当作函数的返回值
可做

闭包
闭包函数:函数内部定义的函数,成为内部函数
该内部函数包含对外部作用域,而不是对全局作用域名字的

时间: 2024-10-18 13:01:24

函数的参数与嵌套使用的相关文章

python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套)

函数的动态参数 1.函数的动态参数 位置参数,默认参数 动态参数的作用 *args ? 1.能够接受不固定长度参数 ? 2.位置参数过多时可以使用动态参数 动态参数的用法: def func(*c): #形参位置上的 * 是聚会 print(*c) #函数体中的 * 就是打散 #func(1,2,3,4,5,6,7,8,9,0) **def eat(a,b,*args): #位置参数,动态位置参数** print(a,b,args) #结果:面条 包子 ('饺子', '馅饼', '馒头') pr

函数嵌套和函数名作参数结合使用

将子函数名作为参数存储起来,再次调用这个函数时,仍然保存着上层函数的参数 存储子函数的操作在上层函数中,传入的时候子函数可以没有参数,调用时再添加参数 越说越乱直接上demo 1 a=[] 2 def adda(a1,a2): 3 def addb(a3): 4 print('--') 5 return a1+a2+a3 6 a.append(addb) 7 print('++') 8 adda('123','456') 9 print(a) 10 for aa in a: 11 aa('a3'

ES6新特性(函数默认参数,箭头函数)

ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值. 那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:   这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了: 2.箭头函数 箭头函数用 =>

走入计算机的第十八天(函数的参数)

一  形参和实参 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.因此,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量 2.实参可以是常量.变量.表达式.函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参.因此应预先用赋值,输入等办法使参数获得确定值 二   位置参数: 1 按照从左到右的顺序依次定义的参数,必须被传值,多一个不行,少一个也不行  ,与形参一 一对应叫做位置参数    2关键字

C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类

类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. 1 //单继承的定义 2 class B:public A 3 { 4 < 派生类新定义成员> 5 }; 6 //多继承的定义 7 class C:public A,private B 8 { 9 < 派生类新定义成员> 10 }; 我们这篇主要说单继承. 派生类共有三种C++类继承方式: 公有继承(public) 基类的公有成员和保护成

javascript如何给事件处理函数传递参数

javascript如何给事件处理函数传递参数:在应用中可能需要给注册的事件处理函数传递参数,但是会发现好像无法实现直接传递,下面就简单介绍一下如何给事件处理函数传递参数.先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&

Excel教程(2) - 函数的参数

函数右边括号中的部分称为参数,假如一个函数可以使用 多个参数,那么参数与参数之间使用半角逗号进行分隔.参数 可以是常量(数字和文本).逻辑值(例如 TRUE 或 FALSE).数 组.错误值(例如#N/A)或单元格引用(例如 E1:H1),甚至可以 是另一个或几个函数等.参数的类型和位置必须满足函数语法 的要求,否则将返回错误信息. 常量 常量是直接输入到单元格或公式中的数字或文本,或由名 称所代表的数字或文本值,例如数字"2890.56".日期"2003-8-19"

Swift 烧脑体操(二) - 函数的参数

前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困难.不过一切都是值得的,Swift 相比 Objective-C,写出来的程序更安全.更简洁,最终能够提高我们的工作效率和质量. Swift 相关的学习资料已经很多,我想从另外一个角度来介绍它的一些特性,我把这个角度叫做「烧脑体操」.什么意思呢?就是我们专门挑一些比较费脑子的语言细节来学习.通过「烧

【C/C++学院】0813-C与CPP不同以及命名空间简介/函数重载与函数默认参数/泛型auto/Newdelete

C与CPP不同以及命名空间简介 命名空间在软件设计中的作用就是为了实现迭代式开发. 命名空间的别名 #include <iostream> namespace runrunrunrun { int a(10); char *str("gogogo"); namespace run //命名空间的嵌套 { int a(9); } } namespace runrunrunrun //命名空间的拓展 { int y(5); //int a(15);重定义错误 } namespa