python学习之基本语法 您所在的位置:网站首页 day8.files/image008.png python学习之基本语法

python学习之基本语法

2023-04-06 00:49| 来源: 网络整理| 查看: 265

前言:

函数和方法以及模块是编程语言里的高级语法。

函数的定义:

函数是指组织好的、可重复使用的、用来实现单一或相关联功能的代码段,这里注意,关键特性是可复用,有一定的功能。

函数的分类:

函数按照来源来分(是否自定义的),可以分为Python内置函数(也可以叫做系统函数)和自定义函数。

按照函数是否带参数,可以分为无参函数和有参函数和多参函数。

按照函数是否有返回值,可以分为无返回值参数和有返回值参数。

正文:一,

一个简单的自定义函数示例和简单的形参实参以及形参里的默认参数:

首先,我们写一个简单的两数相乘并打印结果的代码:

a = 3 b = 5 print(a*b)

那么,相对于这两个变量a和b来说,如果变量改变了,这一段代码里的变量定义还要重新来一次对吧,比如,我设定 a = 38.5  b = 27.6 ,然后打印它们相乘的值,代码得改成这样:

a = 38.5 b = 27.6 print(a*b)

问题来了,三个数相乘呢?还要重新写一遍变量定义吗?如果是使用函数就不需要这样了,因此,定义了一个函数func1,并将相关功能封装为 return a*b:

def func1(a,b): return a*b print(func1(3,5)) print(func1(38.5,27.6))

以上是使用到了函数调用,其实,def func1(a,b): return a*b  这些就已经构成一个完整的函数了,但,函数既然被定义出来,自然是要使用它喽,也就是函数调用,本例是最简单的直接函数调用。调用方法为:函数名(参数1,参数2)

func1(a,b) 这个是函数名(形参),形参的数目并不是一定的,是根据函数的功能来确定的,比如,两个数相乘,那么,形参就应该定义两个,形参之间以  逗号分隔开,而这两个参数叫做形参的位置参数,而最后两行的func1(3,5)和func1(38.5,27.6),括号内的参数叫实参,也就是实际参数。形参和实参的个数需要一致,比如,形参定义的是三个数,那么实参也需要有三个。

形参,还有一种默认参数,在实参调用的时候,如果有默认参数,而实参有定义参数,那么,将不会优先使用默认参数。

默认参数示例(这里定义的默认参数的值是li,形参是三个参数,第三个参数就是默认参数,而函数调用的时候,第三个实参定义为了wang,调用结果显示,默认参数没有使用。):

def bmi(height,weight,name = "li"): i = weight/height**2 print('%s de tizhong zhishu wei%f'%(name,i)) bmi(1.75,75,"wang")

这里的输出结果如下:

wang de tizhong zhishu wei24.489796 [Finished in 0.3s]

在实参调用阶段,是可以省略默认参数的,如果省略,那么,将会使用默认参数,如果不省略,将会是上面的那种情况(下面演示省略的情况) 

代码示例(函数调用的时候,实参只使用了两个,代码运行后,自动使用了形参定义的默认参数):

def bmi(height,weight,name = "li"): i = weight/height**2 print('%s de tizhong zhishu wei%f'%(name,i)) bmi(1.75,75)

 运行结果:

li de tizhong zhishu wei24.489796 [Finished in 0.1s]

错误示例(形参和实参不呼应的情况):

def func1(a,b,c): return a*b print(func1(3,5)) print(func1(38.5,27.6))

结果如下:

Traceback (most recent call last): File "/test2.py", line 3, in print(func1(3,5)) TypeError: func1() missing 1 required positional argument: 'c' [Finished in 0.1s with exit code 1]

 翻译一下错误;

形式错误,函数func1( ) 缺少了一个必须要有的实参 c。

如何改正呢?很简单,形参定义的是三个,那么,实参给三个就OK啦

def func1(a,b,c): return a*b print(func1(3,5,34534)) print(func1(38.5,27.6,10000))

再次运行,将不会报错啦。

二,

函数的形参的多参问题(也可以称之为形参的可变参数,在代码块里,形参的可变参数表现为元组的形式)

那么,比如说,想要任意个数相乘的函数怎么设计呢?没错,是设计。

这里的知识就涉及到了数组和键值对以及for循环,参数传递了。请看下面的例子:

def func1(*a): result = 1 for i in a: result = result*i return result print(func1(3,4,6,2))

以上代码里,形参是*变量名(这里的变量名可任意设置,但一般为*args,我这里写的比较随意),初始的相乘结果是1,那么,1乘以任意数,结果为任意数,对吧。函数调用为func1(3,4,6,2),实参(3,4,6,2)组成了一个数组,在for循环内,通过循环,一次取数组里的一个数字,依次相乘,最后将相乘结果汇总,返回结果,这里使用的是形参的数组形式。

其实这里的数组传递过程也可以称之为解包,实参解包了形参的可变参数,因为可变参数是元组嘛。

还是以计算体重指数为例子,体重指数的计算公式是:体重/身高的平方,体重单位为公斤,身高单位为米,那么,最近一段时间多次平均体重值/身高的平方,体重指数会更为准确,这也就要求,调用函数的时候,实参需要传入不固定的体重值来代表多次体重值,这样,就需要使用到关键参数了。

代码示例如下(调用函数里的实参是指的,身高1.75米,体重75公斤,80公斤,82公斤,90公斤,测体重四次,越来越肥了。):

def bmi(height,*weight,name = "li"): i = (sum(weight)/len(weight))/height**2 print('%s de tizhong zhishu wei%f'%(name,i)) bmi(1.75,75,80,82,90)

还有一种形参是键值对的形式,这个形参的参数也可以称之为关键参数,在代码块里,关键参数表现为字典,也就是一组key:values  。那么,还是以体重指数代码为例,演示关键参数,代码示例如下:

def bmi(height,*weight,name = "li",**kwds): i = (sum(weight)/len(weight))/height**2 print('%s detizhongzhishu shi %0.1f'%(name, i)) for key in kwds: print('%s de %s shi %s'%(name, key, str(kwds[key]))) bmi(1.75,75,80,82,90,xingbie="nan",aihao="nv")

结果如下(li的体重指数是26.7,li的性别是男,爱好是女):

li detizhongzhishu shi 26.7 li de xingbie shi nan li de aihao shi nv [Finished in 0.1s]总结:

自定义函数是比较复杂的,有形参,形参的位置是在函数定义的()内,形参又可以分为位置参数,默认参数,可变参数,关键参数,有实参,实参的位置通常在函数调用时,形参和实参是有一一对应的关系,尤其是位置参数和实参,必须一一对应,而可变参数和关键参数为函数提供了更为灵活的扩展,使得程序能够有更多的自由,可变参数和关键参数可看做元组和字典。这两个参数传递到实参可以看做是一个解包的过程:打散了元组和字典。

三,

系统函数(也可以称之为内建函数)

上面讲的都是我们自定义的函数,其实应该是首先讲解内建函数的,内建函数构成了Python的基础。常用的内建函数比如print(),sum(),map(),range(),type(),len()等等函数。

1,

Python3.8内都有哪些内建函数?

代码示例:

b = dir(__builtins__) print(b) print(len(b))

结果如下(总共152个内建函数):

['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', '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'] 152

2,

print()函数

这个函数其实没有你想象的那么高的应用频率,此函数通常是在测试阶段使用,在真实的生产环境下并不经常使用甚至是禁止使用此函数的,print主要是格式化输出一些内容,以验证某段代码是否正常运行。

print函数的格式化问题可以参考我原来写的博客:字符串的几种格式化以及“not all arguments converted during bytes formatting”这种报错_zsk_john的博客

3,

type()

还是以上面的体重指数为例:

def bmi(height,*weight,name = "li"): i = (sum(weight)/len(weight))/height**2 print('%s de tizhong zhishu wei%f'%(name,i)) print(type(i)) bmi(1.75,75,80,82,90)

你认为i这个常量的类型是什么呢?是int还是float?

前面的关键参数,我们也可以查看一下它的类型,看看到底是不是字典类型:

def bmi(height,*weight,name = "li",**kwds): i = (sum(weight)/len(weight))/height**2 print('%s detizhongzhishu shi %0.1f'%(name, i)) for key in kwds: print('%s de %s shi %s'%(name, key, str(kwds[key]))) print(type(kwds)) bmi(1.75,75,80,82,90,xingbie="nan",aihao="nv")

结果如下(结果表明,确实是字典,并且该循环是循环了两次,实参传递了两次到形参嘛,因此,是循环了两次。):

li detizhongzhishu shi 26.7 li de xingbie shi nan li de aihao shi nv [Finished in 0.2s]

type()函数主要是利用print()函数的配合,查看数据传输过程中的数据类型是否符合我们的预期,如果不符合预期,可以提早查明原因。

3,

sum()

数字相加的函数,这个没什么好说的。

4,

input()

程序交互的入口,如果想要交互,那么,这个函数还是比较好用的,此函数过于简单,就不演示了。

5,

len()

元组,字典,字符串的长度

示例:

a = "hello world" print(len(a),type(a))

len()函数 认为空格也是,因此,输出结果是11, type是字符串。此函数是非常常用的函数。

6,

range()

此函数是快速生成一个数列,通过数列,数列角标等属性,可以设计出控制程序流程,可使用在循环内做循环控制等等功能。也是比较常用的一个函数

当然,内建函数还有很多很多,比较基础的常用的大体也就十来种吧。剩下的就不一一介绍了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有