python函数与参数
一、Python函数
Python中所谓的使用函数就是把你要处理的对象放到一个名字后面的括号里就可以,简单来说,函数就是这么使用的,可以往里面塞东西就得到处理结果,在python中还有以下函数:
启动python解释器,输入dir(builtins),可以看到很多python解释器启动后默认加载的属性和函数。
ES:
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license()” for more information.
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
下边简单介绍下实用的内建函数。
id() 函数:查看对象的内存地址;
help()函数:查看帮助信息;
type()函数:查看对象的类型;不会认为子类是一种父类类型;
isinstance()函数:查看对象类型;会认为子类是一种父类类型;
dir()函数:查看对象中的属性、方法等;
ord():得到一个字符所对应的数字编码;
chr():实现由数字编码向字
map():map函数对只当序列映射到指定函数
filter():filter函数会对只当序列按照规则执行过滤操作
reduce():reduce函数会对擦书序列中元素进行累积
二、开始创建函数
Def(即define,定义)的含义是创建函数,也就是定义一个函数
Arg(即argument,参数)或paramenter,二者都是参数,区别见文章最后
Return 即返回结果
【注】
Def和return是关键字,python就是靠识别这些特定的关键字来明白用户的意图,实现更为负责的编程
闭合括号后面的冒号必不可少,必须注意要输入英文冒号,否则会报错:SyntaxError: invalid character in identifier
如果在ide中冒号后表面回车(换行),会自动得到一个缩进,函数缩进后后面的语句被称作是语言块,缩进是为了表明语言和逻辑的从属关乎关系,是python最显著的特征之一
举例1:
摄氏度转换公式
#定义函数
def fahrenheit_converter(C):
fahrenheit = C *9/5 +32
return str(fahrenheit) + "℃"
#调用函数
C2F = fahrenheit_converter(35)
print(C2F) #95.0℃
解析:
摄氏度转化定义为函数fahrenheit_converter(),()为输入的摄氏度的数值,c设为参数,最后返回的是华氏度的数值(fahrenheit)。调用(call)函数,c为35,结果为95℃。
【注】
1、python charm 单行注释,代码行前加上“#”
2、python charm 多行注释快捷键,批量选中要注释的行,点击快捷键ctrl+/;批量选择注释行,点击快捷键ctrl+/,是进行取消注释操作。
三、参数
必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误。
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
#定义函数
def position_parameter(base_up, base_down, height):
return 1/2 * (base_up + base_down) * height
#调用函数
# value = position_parameter(1,2,3) 位置传参
value = position_parameter(base_down=2,base_up=1, height=3) #关键字传参
print(value)#4.5
解析:
定义一个函数名称为 position_parameter,也就是梯形面积,设定参数
base_up(上底),base_down(下底),height(高),对于构造梯形面积函数来说,这三个参数缺一不可。
调用参数的时候,将每个参数名称后面赋予一个我们想要传入的参数的值,这种以名称作为一一对应的参数传入方式被称为是 关键词参数。
位置参数
#定义函数
def position_parameter(base_up, base_down, height):
return 1/2 * (base_up + base_down) * height
#调用函数
t_area = position_parameter(1,2,3) #位置传参
print(t_area) #4.5
解析:
定义一个函数名称为 position_parameter,也就是梯形面积,设定参数
base_up(上底),base_down(下底),height(高),对于构造梯形面积函数来说,这三个参数缺一不可。
调用参数,填入的参数1,2,3分别对应着base_up,base_down,和height.这种传入参数的方式被称为位置传参。
默认参数
定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。
def introduce_person(name,age,city ="China",interest ="reading"):
print("My name is",name)
print("I am",age,"years old")
print("I come from",city)
print("I interest in",interest)
introduce_person("zhangsan","15") #默认传参
# introduce_person("zhangsi","14","Melbourne") #位置传参
# introduce_person("zhangwu","13",interest = "playing") #关键词传参
默认传参执行结果
解析:
有多个默认参数时(name,age,city,interest),可以按照顺序提供默认参数,比如调用(name,age),意思是除了name,age,这两个参数之外,city,interest参数没有提供,仍然使用默认值。
也可以使用位置传参或关键词传参改变默认参数值。
【注】
1、当定义一个有默认值参数的函数时,有默认值的参数必须位于所有没默认值参数的后面。
2、默认参数必须指向不变对象!
可变参数
可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
def total(a=5, *numbers, **phonebook):
print('a =', a)
#遍历元组中的所有项目
for first_system in numbers:
print('My first_system', first_system)
#遍历字典中的所有项目
for first_dirt, second_dirt in phonebook.items():
print(first_dirt, second_dirt)
print(total(15,1,4,7,zhangsan=147,lisi=258,zhaowu=666))
运行结果
解析:
对于*来说,一般引用单个的数字,并以组的形式储存;对于**来说,引用的形式为字典,要求参数输入时的格式为:key_0=key_value_0, key_1=key_value_1…。
当我们声明一个诸如 *param 的星号参数时,从此处开始直到结束的所有位置参数(Positional Arguments)都将被收集并汇集成一个称为“param”的元组(Tuple)。
类似地,当我们声明一个诸如 **param 的双星号参数时,从此处开始直至结束的所有关键字参数都将被收集并汇集成一个名为 param 的字典(Dictionary)。