我是靠谱客的博主 留胡子玫瑰,最近开发中收集的这篇文章主要介绍未定义函数或变量 syms。_python自学篇(第三章:函数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

函数

在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数。

看个例子:

087e9e2895601a3bbbe874cf5b3dc560.png

解析:def是函数关键字,hello是函数名,小括号里可以有0个或者多个参数,用逗号隔开

这个函数就是输出hello world,如果只是写了这个函数,是没法正常使用的,需要在外部进行函数调用,调用方式也就是函数名加参数的方式

函数基本结构:

98d0c50fd3428b2dd1518fb9ace1b86c.png

声明函数的目的:

1.需要重复执行的内容放在一个函数里,这样可以节省代码量,只要外部调用就可以无限使用。

2.代码的整体简洁性,把一个功能块放在一个函数里,加上注释,可读性提高。

1.def语句和参数

定义一个带有参数的函数

0ade1f46d58786f6e7486be77953b75d.png

结果:

5e7acd837bb27354054f4164290bd8f9.png

解析,定义一个hello函数,接收两个参数,name和age,在正常调用的时候,

需要使用hello('参数1','参数2'),这里要注意参数的数据类型需要对应好,如果这里的age值传整型10,而不是字符串10就会报错,因为函数代码块打印的整体是一个字符串,不能拼接一个其他类型的数据,但是也可以通过强制数据类型转换解决。(使用int()函数)

另外,参数个数和顺序也是要对应准确

2.返回值和return语句

在实际的编码过程中,函数体内除了会执行必要的代码逻辑,也需要提供返回值来作为其他代码必要的条件,比如之前章节提到过的内建函数len(),如果加一个字符串‘hello’,就会返回这个参数的长度5。

return的结构:

b2cac2b455a724e88052c837ad9bd515.png

下面举一个例子:

4fa4358962c3fd8ee1c36791cfa2d66f.png

结果:

cf665e98a22e4555299cda31c6285ff6.png

解析:定义了一个函数chooseFruit(),参数fruit,当调用函数时,传入的参数是apple,经过条件代码块返回苹果味道好极了存入变量spam中,最后通过print()函数打印出来,最后代码块也可以写成

print(chooseFruit('apple')),效果是一样的。

3.None值

None表示没有值,和True、False一样,首字母大写,类似java里的null。

50f0f763d995fde2fe791aceb45cbdde.png

结果:

5da8a30155b5d0ea288fc6c818ac4abb.png

解析:不同于len()和input()函数,print()函数没有返回值,对于这些函数,python都会默认给这些函数返回None

4.关键字参数和print()

4.1:在有些场景中,我们连续打印两个字符串,比如:

00f6538b2f428d20ea7ba42f2409bb10.png

结果:hello world被分在了两行,原因是print函数默认会在当前打印结果后添加换行符

794fbbdccced55868a9a9245e3b3b917.png

但是存在一些常用关键字,可以改变内容的展示方式

end关键字:改变文本后的拼接方式

299247712d6c4481e060c000de38479e.png

结果:在第一个打印的字符串后面,替换了原来的换行符,变成了一个空格

4c2e32b110f8294fae9299eb38153425.png

4.2:还有一种场景,需要同时打印出多个字符串

4510923a706cfd8bedaef5844af20ffc.png

结果:输出的内容默认由空格分隔

90e2442518236442c1cf4df2a69fe269.png

sep关键字:改变文本间的拼接方式

2792b6999d6946c008e37e55ac4ed6fd.png

结果:字符串之间替换了原来的空格,变成了逗号分隔

496eed4314ca27a3715bdf398b6188e1.png

除了这些外,还有一些函数有指定的关键字可以选择。

5.局部和全局作用域

概念:在一个程序里,通常就只有一个全局作用域,但是有多个局部作用域。全局作用域下声明的变量叫做全局变量,局部作用域下的变量叫做局部变量。全局作用域开始于程序开始,终止于程序结束,局部作用域开始于函数被调用时,终止于函数返回结果时(对于没有return的函数,默认返回None)。

作用域是一个比较重要的概念,需要理解以下几点:

55177e87eadb3f818851659cf46e1b3c.png

另外,在实际使用中,需要根据特定情况去使用局部变量还是全局变量

5.1:全局作用域不能使用局部变量

9fcdcf0f59ec13f81de51cb87774b66f.png

结果:变量错误,age在全局作用域中未定义,只是在hello()函数内定义,属于局部变量

2bb04c0f374ef06bcd0a64a2c67bf777.png

5.2:局部作用域可以访问全局变量

3ed9da5d9725314ef05e924740d05eba.png

结果:输出10

解析:定义全局变量10,函数hello()返回全局变量,通过print打印,正常输出结果10。

5.3:不同函数间的局部作用域没有任何关联

例1:

043e1c7534f4b0b1c99766f7795f0d39.png

结果:

3a34391a6d6deeaf156b718796c463c3.png

解析:虽然在man()函数中调用了woman()函数,但是woman()函数里的age和name的值并没有传递过来,最终打印结果还是man()里的参数值

例2:

5288a213ebb22cf4680b7897e90fce6d.png

结果:

c2ffc2ee0b53cf7fb98ce1f21e49abbc.png

解析:去除了man()函数中声明的age变量,虽然man()函数中调用了woman()函数,但是age局部变量并没有传递,导致man()打印age报错

5.4:不同作用域可以使用相同的变量名

在5.3例子中就展示了不同的局部作用域下可以使用相同的变量名,那在全局作用域和局部作用域里是否可以呢?

e10fd3bf34c860184ffd7f8ec61a8526.png

结果:

51e7c2dc8a9aba0e22cd7f016c05b1f5.png

解析:第一个直接打印全局变量name值为dingy,然后调用sapm()函数,函数里同样是定义了一个name变量,打印出chengjq,最后在全局作用域下再打印name,还是全局变量的值dingy,说明不同的作用域下可以定义相同的变量名,但是值互不影响

但是如何局部变量如果影响全部变量的值呢

aa9b85bd1e4498de2f1754b7a053cb5d.png

最后在全局变量里打印的就是局部变量的值,其实中间只是重新赋值

6.global语句

global用来表示变量就是全局变量,无论在局部作用域下还是全局作用域下 ,他都是全局变量

e51e8f3339e523f3941c27946caa660f.png

结果:

587d5d1f2317649e3f45b92b18204376.png

解析:如果没有global name,最后输出dingy,但是name声明为全局变量后,他的作用域就是全局作用域。

还有一点要注意:

78f275a960a4e8aaf3bf82eb8fe96652.png

比如这个例子:结果打印出 chengjq

解析:如果函数内的变量没有声明global 也没有赋值语句,该变量也是全局变量

如果在spam函数代码块后面加上name的赋值语句

488f7c30171b5f83929971ed519853a8.png

结果:

2cb7adbf6e4287ba4618b05d6c029d2c.png

解析:意思就是python编译器看到spam()函数里有变量name的赋值语句,就认为name是局部变量,但是一开始打印print(name),此时的name还未定义,错误就是指:打印的变量在声明之前报错

7.异常处理

在之前的代码中,已经遇到了很多的错误情况,但是有时候不希望错误情况影响程序的正常运行,可以使用try except代码块来处理

比如上面一个例子做一下修改:把报错的print(name)放在try except代码块里

52d9ffe6d98c8af43144becd268ff83f.png

结果:输出程序bug

解析:try里是程序正常执行的业务逻辑,当try里的代码遇到错误时,会被except给拦截,走except里的代码块,Exception是包含了所有的异常情况,有些时候只需要拦截特定的异常,比如除数不为0的异常:ZeroDivisionError

最后

以上就是留胡子玫瑰为你收集整理的未定义函数或变量 syms。_python自学篇(第三章:函数)的全部内容,希望文章能够帮你解决未定义函数或变量 syms。_python自学篇(第三章:函数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部