'''
形参种类:
1)位置形参
-- 普通位置形参
-- 默认值形参
-- 可变长位置形参
2)关键字形参
-- 有默认值关键字形参
-- 无默认值关键字形参
-- 可变长关键字形参
'''
def fn1(a, b, *, x, y):
pass
# fn1()
# 位置形参与关键字形参的分水岭 *
# 重点:
# 位置实参只能给位置形参进行传值
# fn1(10, 20, 30, 40) # 只有两个位置,给了四个位置
# 关键字实参可以给位置形参与关键字形参进行传值
# fn1(x=30, y=40, a=10, b=20)
# part2
# 两个带默认值的形参
def fn2(a=10, *, x=20):
print(a, x)
fn2(100, x=200)
# 总结:
# 1.有默认值的参数可以不用传值
# 2.*前有默认值的叫默认值参数,属于位置形参,可以被位置及关键字实参进行传值
# 3.*后有默认值的叫有默认值的关键字形参,属于关键字形参,只能被关键字实参进行传值
# def get_p(name, sex='男'):
# pass
# get_p('Bob', '女')
# part3
def fn3(a, b=10, *, x, y=20, z):
print(a, b, x, y, z)
fn3(100, x=200, z=300)
# 总结:
# 1.没有默认值的必须传参,有默认值的可以传也可以不传
# 2.位置有值的必须出现在无值之后,关键字顺序不做要求
# part4
def fn4(a, b=10, *args, x, **kwargs):
print(a, b, x)
print(args)
print(kwargs)
fn4(10, 20, 30, x=100, y=200, z=300)
# 总结:
# 1.可变长是用来接收未接收完的值(接收0到n个):
# -- *args用来接收所以没有接收完的位置(只能接收位置实参)
# -- **kwargs用来接收所以没有接收完的关键字(只能接收关键字实参)
# 2.*args必须出现在所以位置参数之后,**kwargs必须出现在所以参数之后
# 假设第一个位置永远是参数name
def func4(*args, **kwargs):
name = args[0] # 将name抽出来
def func44(name, *args, **kwargs):
# name 可以直接接收,省了抽出来的过程
pass
# part5
def fn5(*args, **kwargs):
print(args, kwargs) # args=(10, 20) kwargs={'x': 100, 'y': 200}
def fn55(*args, **kwargs):
print(args, kwargs) # args=(10, 20) kwargs={'x': 100, 'y': 200}
fn5(*args, **kwargs) # *args就会把元组打散传递,**kwargs就会把字典打散传递
fn55(10, 20, x=100, y=200)
# 容器类型可以打散传值
def temp(*args, **kwargs):
print(args, kwargs)
ls = [1, 2, 3, 4, 5]
dic = {'a': 1, 'b': 2}
temp(*ls, **dic)
- 特 点
- 实参和形参可以重名
- 实质
- 不是实际存在变量
- 中文名
- 形式参数
- 又 称
- 虚拟变量
-
形参
2019-04-28 22:26:00'''形参种类:1)位置形参 -- 普通位置形参 -- 默认值形参 -- 可变长位置形参2)关键字形参 -- 有默认值关键字形参 -- 无默认值关键字形参 -- 可变长关键字形参'''def fn1(a, b, *, x, y): pass# fn1()# 位置形参与...转载于:https://www.cnblogs.com/qiangyuzhou/p/10787374.html
-
指针形参与引用形参
2018-12-07 17:43:28看了很多关于指针形参和引用形参的解答,不尽人意。 指针形参使用情形:(1)标准的C中,C没有引用(2)形参可以为空 引用形参使用情形:(1)形参不可以为空,总指向某个对象 指针形参:指针的行为和其他非引用...看了很多关于指针形参和引用形参的解答,不尽人意。
指针形参使用情形:(1)标准的C中,C没有引用(2)形参可以为空
引用形参使用情形:(1)形参不可以为空,总指向某个对象
指针形参:指针的行为和其他非引用类型一样,当执行指针拷贝操作时,拷贝的是指针的值,拷贝之后,两个指针是不同的指针,如:
int n = 0, i = 42;
int *p = &n,*q = &i;
*p = 42; //你值改变
p = q;//p现在指向i,但是i和n的值都不变
优点是可以明确的表示函数所操纵的是指向数组元素的指针,而不是数组本身,而且可以使用任意长度的实参数组来调用函数;其缺点是函数体不能依赖于数组的长度,容易造成数组内存的越界访问,从而产生错误的结果或导致程序崩溃。
引用形参:优点是函数体依赖于数组的长度是安全的;使用引用避免拷贝,拷贝大的类型对象或者容器对象比较低效,甚至有的类类型(包括IO类型在内)根本就不支持拷贝操作。当某种类型不支持拷贝操作时,函数只能通过引用形参访问该类型的对象。比如使用单例模式时,构造函数和拷贝构造函数此时为私有化,当其对象作为参数传递时,应使用引用形参
函数不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
-
形参和实参的区别
2018-06-15 17:10:14实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 形参...本文转载:https://blog.csdn.net/qq_33187168/article/details/50346465
实参(argument):全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。形参(parameter):全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。形式参数:形参是函数被调用时用于接收实参值的变量。
根据实际需要可有可无。没有形参时,圆括号也不可省;多个参数之间应用逗号分隔。参数包括参数名和参数类型。
形参的类型说明可有如下两种格式:
int max(int a,int b)/*形参的类型在形参表中直接说明*/
{ return (a>b?a:b);}
或
int max(a,b)
inta,b; /*形参的类型在函数体前、函数名后说明*/
{ return(a>b?a:b); }
前者为标准格式,后者为传统格式,通常用前者。
形参和实参的区别
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回
主调函数后则不能再使用该形参变量。
2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形
参。 因此应预先用赋值,输入等办法使实参获得确定值。
3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。
4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值
发生改变,而实参中的值不会变化。
5.当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该
函数运行结束的时候形参被释放,而实参内容不会改变。
而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参
本身。所以在函数体内部可以改变实参的值。
-
const形参和非const形参
2019-10-03 09:45:22我们知道const形参是为了,是为了保证函数内部不会去修改形参。 而C++为了与C兼容,const形参与非const形参,在函数重载时,会被认为是同一个函数,所以就不会被编译器认为是重载,而是重复声明/定义了。 而对于...我们知道const形参是为了,是为了保证函数内部不会去修改形参。
而C++为了与C兼容,const形参与非const形参,在函数重载时,会被认为是同一个函数,所以就不会被编译器认为是重载,而是重复声明/定义了。
而对于const引用形参和非const引用形参,其实是可以被认为是重载函数的。
对于const指针形参和非const指针形参,也是可以被认为是重载函数。
转载于:https://www.cnblogs.com/howarddeng/p/9638434.html
-
默认形参
2019-08-21 19:45:04在C++中,函数的形参可以设置默认值,调用函数时,如果没有提供实参,则使用默认形参,如果形参只有一部分设置了默认形参,则必须靠右排列 函数的默认形参是在编译阶段确定的,因此只能使用常量、常量表达式、全局... -
函数形参
2018-08-27 21:28:51函数形参 函数形参的定义方式: 位置形参 星号元组形参 命名关键字形参 双星字典形参 位置形参: 语法: def 函数名(形参名1,形参名2,...): 语句块 自己理解:按照位置顺序依次一对一接收的形参 ... -
关于引用形参和指针形参的形参的理解问题
2015-04-27 13:03:01自己总是认为指针形参和引用形参的区别很小,他们都可以对实参进行改变,想了解一下他们的具体区别??? -
函数的形参(非引用形参、指针形参、引用形参)
2014-08-29 10:24:05函数的形参(非引用形参、指针形参、引用形参) 一、非引用形参 voidadd1(intv1) { v1+=1; } 这是最普通的形参方式,当函数被调用时,实参的副本初始化形参,函数并没有访问调用所传递的实参,... -
非引用形参VS指针形参VS引用形参
2016-01-14 10:03:52一、非引用形参 voidadd1(intv1) { v1+=1; } 这是最普通的形参方式,当函数被调用时,调用拷贝构造函数,生产一个新的实例,函数所有的修改,都是对新的实例的修改;函数退出之前,会调用析构函数,回收... -
函数的形参(普通形参、指针形参、引用形参)
2013-09-17 00:10:00/对实参无影响 }这是最普通的形参方式,形参仅仅为实参的一个副本,对形参的任何操作不会修改实参的值。例中对v1的操作只是修改了实参的一个副本。实参不变 int *p=&n; add2(p);//p为指向n的指针 或者直接add... -
引用形参 指针形参
2013-10-25 14:04:21引用形参 *是去引用运算符,或称之为间接引用运算符 首先看一下 普通形参 int add1(int a) { return a+1; } void main() { int num = 10; int num2; num2 = add1(num); } 在这种情况下... -
C++的形参
2020-12-04 20:34:04非引用形参1.1 普通形参1.1.1 非const形参1.1.2 const形参1.2 指针形参1.2.1 非const指针形参1.2.2 const指针形参2.引用形参 1.非引用形参 1.1 普通形参 1.1.1 非const形参 传入的形参形式为voidfunc(intx)void \... -
数组形参
2018-03-05 11:43:421.尽管不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形式//尽管形式不同,但这三个print函数时等价的//每个函数都有一个const int*类型的形参void print(const int*);void print(const int[]);void... -
实参、形参
2020-11-11 23:16:35实参形参 注意: 实参向形参的数据传递是“值传递”,单向传递,只能由实参传给形参,而不能由形参传给实参。实参和形参在内存中占有不同的存储单元,实参无法得到形参的值。 -
C++ 引用形参和指针形参
2015-09-26 12:48:18从引用形参和非引用形参的区别来看,似乎任何时候使用引用形参都指针好, 既少了实参到形参拷贝的开消,也同样可以操作(非const )实参。 那指针形参有没有什么优点呢? 1. 指针形参比引用形参更能清晰的向函数... -
形参实参
2016-07-05 21:06:43本文以实例阐述了C++中形参与实参的区别,有助于读者加深对于C++形参与实参的认识。 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量... -
函数的位置形参,位置实参,可变长位置形参,关键字形参
2019-10-06 05:27:07函数的参数详解 形参与实参 形参及形式参数,就是在定义函数是括号中指定的参数(本质就是一个名字) 实参及实际参数,指的是在调用函数是传入的参数)(本质就是一个值) 在调用函数是就会把形参和实参绑定在一起... -
形参&
2019-08-15 10:59:21c++形参里总是会有&,传递引用,可以在函数内部更改传入变量的值 c一般是通过*指针来做到 #include <iostream> #include<stdio.h> #include <bits/stdc++.h> #include<iostream> ... -
指针形参
2016-07-07 11:07:02函数的形参可以是指针,此时将复制实参指针。与其他非引用类型的形参一样,该类形参的任何改变也仅作用于局部副本。如果函数将新指针赋给形参,主调函数使用的实参指针的值没有改变。 事实上,被赋值的指针只影响对... -
c++:引用形参与指针形参
2019-11-16 16:15:51指针形参,对指针变量的拷贝,可以在函数中改变指针所指的变量值,但是无法改变传进的指针值 void reset(int *a)//形参类型是指针类型,因为指针的特性就是间接找到变量 { *a=0; } int i=42; reset(&i);//取... -
形参和实参
2018-06-10 11:11:281、概念形参全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者... -
Python 形参列表中带默认值的形参应放在不带默认值的形参的前面
2019-08-01 18:53:37Python 形参列表中带默认值的形参应放在不带默认值的形参的前面,否则会提示: SyntaxError: non-default argument follows default argument 错误代码: def p(n=None, n2): print(n, n2) p(1) ... -
引用形参
2015-09-18 16:43:23引用形参---直接关联其所绑定对象,而并非是对象的副本。 从C语言背景到C++程序员习惯通过传递指针来实现对实参的访问,在C++中,使用引用形参则更安全和更自然。 引用形参作用: 1、通过引用形参返回额外... -
形参和返回值
2020-12-16 18:30:081 引用类型作为形参和返回值 类名作为形参和返回值 方法的形参是类名,其实需要的是该类的对象 方法的返回值是类名,其实返回的是该类的对象 抽象类名作为形参和返回值 方法的... -
C++函数的形参(非引用形参、指针形参、引用形参)
2014-03-22 15:30:33一、非引用形参 值传递 void add1(int v1) { v1+=1; } 这是最普通的形参方式,当函数被调用时,实参的副本初始化形参,函数并没有访问调用所传递的实参,因此v1+=1不会修改实参的值。对v1的操作只是... -
Swift基础语法: 21 - Swift的可变形形参, 常量形参, 变量形参, In-Out形参
2015-03-16 00:38:06Swift的可变形形参, 常量形参, 变量形参, In-Out形参 -
形参与实参
2020-11-03 17:12:29形参就是方法的定义的参数 当然了这个形参可以使任意类型的变量,当运行到这个方法的时候,虚拟机就会给这个形参分配空间,进行存储值。 当方法运行结束的时候,虚拟机就会释放掉这些内存空间!!! 这个形参的空间...
-
专利挖掘、撰写与转化应用
-
【数据分析-随到随学】Python数据获取
-
Optimization Week 14: Stochastic gradient descent
-
cv2 写入图片成功 但是读取图片失败 int-float的坑
-
【数据分析-随到随学】机器学习模型及应用
-
hadoop自动化运维工具Ambari应用实践
-
java程序员必须认识的英文单词
-
微服务系列第七十一季-Introducing Spring Boot
-
彻底学会正则表达式
-
flutter插件调用APP页面、使用原生aar,framework库
-
找最小值
-
国家注册渗透测试工程师(Web安全)
-
游戏代码-LOL卡萨丁斩杀伤害计算器
-
跟我练内测小分队学习礼包
-
Optimization Week 10: Gradient Descent
-
python机器学习和深度学习.xmind
-
Selenium3分布式与虚拟化
-
RT809F_20210101.exe
-
R语言数据可视化 ggplot2基础2 创建单图层的散点图 创建facet
-
【数据分析-随到随学】数据分析建模和预测