企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# :-: 语言特性和基础概念 [TOC] ## 一、语言特性 ### 1.程序自上而下运行 示例: ``` import time print(5) time.sleep(1) print(4) time.sleep(1) print(3) time.sleep(1) print(2) time.sleep(1) print(1) ``` 以上程序将逐行运行,每隔一秒打印一个数字,输出结果如下: ~~~ 5 4 3 2 1 ~~~ ### 2.区分大小写 `a = 10`与 `A = 10`,生成了两个不同的变量。 ### 3.全部为英文状态下的标点符号 编号语法中包括以下几种标点符号必须使用英文符号,否则会报错 - 逗号 `,` - 括号 `( ) [ ] { }` - 冒号 `:` - 空格 ` ` - 分号 `;` - *字符串里的内容不受限* ## 二、函数 函数可以简单理解为完成特定功能的一段代码,它分为两部分: 1. 调用(使用别人写好的函数的功能) 2. 定义(自己造轮子,完成特定功能,提供给自己和他人使用) >我们初期都是在学习如何调用函数,等掌握了基础才开始尝试定义自己的函数。 这里介绍两个最常用的函数: ### 1.print() `print('hello world')` 这句话将 `hello world` 打印了出来。 还可以同时打印多个内容,并指定分隔符和结束符号: `print(1, 2, 3, sep='啦啦', end='#######')` 打印的内容是`1啦啦2啦啦3#######1` ### 2.input() `input("请输入一个数字:")` 这句话将提示 `请输入一个数字:` ,并等待用户输入,输入完成后返回用户输入的内容。 - 返回的类型是字符串,后面会详细介绍。 - **用户输入的值不可控**(你可能期待用户输入一个整数,但用户可能输入的是一串文字) - input() 由于需要等待用户输入后才继续运行,所以可以作为程序暂停的一种方式。 ## 三、变量 ### 1.变量的概念 > 人类语言里面,当我们提到一个人或物体, 是怎么说的? > > 比如说 聊天的时候,提到你的一个同学, 提到一支球队 > > 对了,用他们的**名字**。 > > 比如: 王晓刚同学, 湖人队等等。 > > 如果不允许使用 事物的名字, 我们的话就没法说了。 **变量可以理解为一种容器,里面可以存放任何东西**。如果放进一个苹果,那容器里面就是苹果,如果放一只铅笔,那容器里面就是铅笔。 计算机语言中,如果产生了数据对象,却没有用容量把它们存放起来,就像这样 ~~~python 16 '我爱你中国' ~~~ 我们后面的代码,怎么去使用这个数字`16`和 字符串`'我爱你中国'`呢?很显然是没办法使用了。 编程语言为了方便操作数据对象,就需要使用容器存放数据对象,并给容器起一个名字。 我们把Python语言中容器的名字, 称之为**变量名**, 有时也简称**变量**。 所以Python中的变量,就是容量的名字,存放着各种数据对象。 例: ``` A = 5 A = '中国' ``` 这里面 `A` 就是一个容器的名字,我们先把数字5放到`A`容器里,那`A`就代表数字5,我们再把`中国`放进`A`容器里,那`A`就代表`中国`。 ### 2.变量命名 >变量用的好或不好,和代码质量有着非常重要的联系,合理的使用变量,可以让你的代码可读性更高并且更加简洁。 #### 2.1.变量命名 **1)命名的规范性** - 变量名可以包括字母、数字、下划线,但是数字不能做为开头。 - 系统关键字不能做变量名使用,如print, input等 - 除了下划线之外,其它符号不能做为变量名使用 ! - Python的变量名是区分大小写的 **2)编程语言常用驼峰命名法** - 大驼峰:每一个单词的首字母都大写 FirstName LastName - 小驼峰:第一个单词以小写字母开始,后续单词的首字母大写 firstName lastName 但是在python中一般使用小驼峰加下划线的方式 ``` has_error is_person ``` #### 2.2.变量命名的描述性 在接受范围内,变量名所描述的内容越精准越好。 - BAD: day, host, cards, temp - GOOD: day_of_week, hosts_to_reboot, expired_cards 变量名能让人猜出类型。 例如: Bool 类型 - is_user : 是否是用户 例如: int/float 类型 - port:端口号 - age:年龄 这些很直观的能让人猜出类型。 >注意: 不要使用复数来表示一个 int 类型变量,比如 apples,最好用 number_of_apples来替代。 #### 2.3.变量名尽量短,但是不要太短 - 一个好的变量名,长度应该控制在两到三个单词左右 例如,`person_index` - 同一段代码内不要使用过于相似的变量名,比如同时出现 `users`、`users1`、 `user3`。 - 不要使用带否定含义的变量名,用 `is_special `代替 `is_not_normal`。 #### 2.4.合理使用变量 同一个变量名指代的变量类型,也需要保持一致性。 在一个函数中,一个变量名叫做 `photo`, 那么在其他地方就不要改成`image`。 #### 2.5. 变量定义尽量靠近使用 刚开始学习编程时,我们习惯把定义的变量放在开头,或一些函数最前面。如下 ``` def get_name(): students = [] teachers = [] ``` >***~~第3至第6小点是变量使用技巧,可以以后再回来看~~*** ### 3.合理使用namedtuple/dict Python中的函数可以返回多个值,如果某一天我们想让函数再多返回一个值怎么办呢? ``` #之前 def get_name(): return student, teacher #现在 def get_name(): return student, teacher, parent ``` namedtuple/dict 此时可以派上用场 ``` #1. 使用dict def get_name(): return { 'student': student, 'teacher':teacher, 'parent' :parent } names_dict = get_name() # 2. 使用 namedtuple from collections import namedtuple Names = namedtuple("Names", ['student', 'teacher', 'parent']) def get_name(): return Names( student = student, teacher = teacher, parent = parent ) names = get_name() ``` **但是这样不能像之前一样,每一次解包多变量接受函数返回值。** ### 4. 控制单个函数内的变量数量 当某一函数过长时,或者包含太多变量时,请及时把它拆分成多个小函数。 ### 5. 删除掉没用的变量 在一个函数中,如果某一个定义的变量没有被用到,请及时删除它。 ### 6. 定义临时变量提高可读性 ``` if student.is_active and (student.sex == 'female'): student.add_tolist() return #把上面的例子变成如下 student_is_eligible = student.is_active and (student.sex == 'female') if student_is_eligible: student.add_tolist() return ``` 需要合理运用临时定义对象,把不必要的东西赋值成临时变量反而会让代码显得啰嗦! ## 四、代码注释 我们写的代码 为了 别人容易看懂, 甚至自己 以后能看懂, 就需要加入一些我们熟悉的**人话**,也就是人类语言,辅助理解。 这些辅助理解的人话,就是注释。 这些人话可以是任何一种语言,只要方便你看懂代码就行,中文、英文、法文都可以。 Python的注释以`#`开头,后面的内容都是注释 ``` # info 变量 记录 作者的信息,包括 名字,身高,体重 info = {'name' :'不知百度知', 'height':'180cm'} # 改变 作者的身高记录 info['height'] = '175cm' print(info) # 打印身高到屏幕上 ``` 怎么样,有了上面的注释,这些代码是不是更容易读懂了? > 我们要注意的是,通常注释是不会对代码的执行有影响的(除了一些非常特殊的注释,比如代码开头的文件编码注释,以后会讲) 基本用法: ``` # 单行注释 # 我又注释一行 # 我再注释一行 a = 10 # 行尾注释 # 下面是多行注释,适合大段文字 ''' 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 ''' ``` ## 附:The Zen of Python (Python之禅) 最后分享一下 Zen of Python 准则。 > 在交互式解释器中输入 import this 就会显示 Tim Peters 的 The Zen of Python | The Zen of Python, by Tim Peters | Python之禅 by Tim Peters | | ------------------------------------------------------------ | ------------------------------------------------------------ | | Beautiful is better than ugly. | 优美胜于丑陋(Python 以编写优美的代码为目标) | | Explicit is better than implicit. | 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似) | | Simple is better than complex. | 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现) | | Complex is better than complicated. | 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁) | | Flat is better than nested. | 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套) | | Sparse is better than dense. | 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题) | | Readability counts. | 可读性很重要(优美的代码是可读的) | | Special cases aren't special enough to break the rules.Although practicality beats purity. | 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上) | | Errors should never pass silently.Unless explicitly silenced. | 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码) | | In the face of ambiguity, refuse the temptation to guess. | 当存在多种可能,不要尝试去猜测 | | There should be one-- and preferably only one --obvious way to do it. | 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) | | Although that way may not be obvious at first unless you're Dutch. | 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido ) | | Now is better than never.Although never is often better than *right* now. | 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量) | | If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea. | 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准) | | Namespaces are one honking great idea -- let's do more of those! | 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召) |