代码语言:javascript复制
形式参数:
实际参数:固定数参数
默认参数:给参数一个默认值,赋予新值时覆盖默认值。
位置参数:sys.argv[XX]
代码名称、函数、变量不可以与系统默认参数、模块名字相同
if __name__ == '__main__':
__name__:
在主动调用的时候返回__main__(意思就是主动调用这个函数)
在被动调用的时候返回__foo__(像导入模块的时候,顺带到这个地方,并不是要执行它的时候返回foo)
所以在if __name__ == '__main__':下面的代码是属于在主动调用的时候才执行。
前向引用:
def foo():
print('in foo')
bar() #此时函数的内容并没有执行,当调用的时候才开始真正的执行函数
#foo() 如果这个时候调用foo()函数的话,会报错,因为bar函数还没有生成
def bar():
print('in bar')
foo()
内部函数/内嵌函数:
def foo():
print('in foo')
def bar():
print('in foo-bar')
bar()
foo()
#函数bar()只能在foo函数内部调用,foo函数结束bar则结束,类似于局部变量的意思
函数操作符:
使用一对圆括号()调用函数,如果没有圆括号,只是对函数的引用
任何输入的参数都必须放置在括号中
调用:把函数执行一遍
引用:把函数本身指向引用者
>>> def func():
... return 'hello wlrkd'
...
>>> a = func()
>>> b = func
>>> a
'hello wlrkd'
>>> b
<function func at 0x7f90fc1afe18>
>>> b()
'hello wlrkd'
关键字参数:
关键字参数的概念仅仅针对函数的调用
这种理念是让调用者通过函数调用中的参数名字来区分参数
这样规范允许参数缺失或者不按顺序
def get_ingo(name, age):
print('%s is %s years old' % (name, age))
get_ingo('bob', 23)
get_ingo(23, 'bob')
get_ingo(age=23, name='bob')
#get_ingo(age=23, 'bob') #错误,关键字参数必须在后
#def func(age=23, name): #错误,定义函数时,有默认值的参数必须在后
# get_ingo(23, name='bob') #错误,name变量得到了多个值
# get_ingo('bob', 23, 24) #错误,调用函数时,实参个数要与形参个数相同
get_ingo('bob', age=23)
参数组:
python允许程序员执行一个没有显示定义参数的函数
相应的方法是通过一个把元组(非关键字参数)或字典(关键字参数)作为参数组传递给函数
def get_args(*args): #一个*号代表以元组形式接收参数
print(args)
def get_kwargs(**kwargs): #两个*号代表以字典形式接收参数
print(kwargs)
def get_info(name, age):
print('%s is %s years old' % (name, age))
if __name__ == '__main__':
get_args()
get_args('abc')
get_args(10, 20,30, 40)
get_kwargs()
get_kwargs(name='bob', age=25)
info = ['bob', 23]
get_info(*info) #在实参传递的时候以一个*号,代表字符串字符串、元组、列表
info_dict = {'name':'azj', 'age':25}
get_info(**info_dict) #两个*号代表的是字典的含义,将字典进行传递
()
('abc',)
(10, 20, 30, 40)
{}
{'name': 'bob', 'age': 25}
bob is 23 years old
azj is 25 years old