作者回复: 我想你是想要知道如何同时取得一个字符串(序列)的第一个和第三个元素,在Python中有一种非常简便的实现方法:
假设有字符串:
aString = ‘abcd’,
将字符串同时赋予四个变量,既:
x1, x2, x3, x4 = aString
那么 x1 就是字符串的第一个元素,x3 就是第三个元素了是不是很灵活,而且对序列类型都可以生效的
还有一种情况要在编程中考虑到,如果字符串中的元素比较多的时候,如:
aString = ‘abcdefg’
不需要定义更多的变量来一一对应元素个数,可以使用 *(星号)来匹配,同样取出第一个第三个元素,使用
x1, x2, x3, *x4 = aString # 注意x4变量前面的星号
使用x1, x3 变量依然可以取出第一个和第三个元素,而且这样编写程序适用范围更广泛哦
作者回复: * python访问数据库
使用Python进行运维自动化是非常有效达成目标,也非常有“钱”景的。为了照顾更多的0基础学员,我在课程中没有涉及到具体的数据库操作;考虑运维平台的场景,绝大多数场景会使用MySQL作为数据库,Python直接访问MySQL数据库的代码不用自己编写,在MySQL的官方网站有关于库的安装、代码样例、练习、API参考甚至二次开发的样例,位置在
https://dev.mysql.com/doc/connector-python/en/
另外在编写运维自动化时,还会遇到并非直接访问数据库,而是使用Python编写的web框架访问数据库,框架程序会将上面提到的连接器进行封装,用更高级的方式访问数据库;如Django Web框架会使用django.db模块,参考代码为:
https://docs.djangoproject.com/en/2.0/topics/db/models/
如Flask 框架会使用SQLAlchemy访问MySQL数据库,参考代码如下:
http://flask.pocoo.org/docs/1.0/patterns/sqlalchemy/
具体连接数据库的方式要根据你如何编写Python的程序而定。
* 调用java开发的接口
关于Python调用已经编写好的Java程序的接口呢,首先要清楚Java程序提供的接口规范:如果是跨主机访问要搞清楚,java程序提供的是TCP访问协议还是HTTP(S)协议,在协议之上还要了解API的规范(就是互相通信的格式了),目前比较流行的有JSON、XML两种格式,当然也有公司使用自己的API规范,如Google开放出来的Protobuf等。由于接口实现形式是多种多样的,不妨先从使用requests库和json库学起,先学会使用HTTP协议通过JSON格式进行通信,这也是各大公有云厂商普遍使用的API提供方式。
作者回复: str_give[:5:-1]
作者回复: 我们可以从编程的目的(需求)入手,有时候需求开发一个 “把一串字符拆分成多个单独的字符”的需求,
当aString变量的值只包含四个字符"abcd"s时,用x1, x2, x3, x4 = aString 这种表达式,可以依次把每个字符取出来,像你理解的那样,一个变量对应一个字符;
可是现实应用会很复杂,如果aString 有100个字符,赋值的时候,我们就不能写x1,x2...x100 写100个变量,这时候需要使用 *变量的方法来写。如果你的需求是取一个包含100个字符的字符串前三个字符,可以写为 x1, x2, x3, *x4 = aString , 用 x1 x2 x3 表示前三个字符,*x4表示第四到第100个字符。
作者回复: 下标是访问序列非常灵活的方法,字符串、元组、列表都属于序列,因此可以使用下标访问其中的元素。我们取序列的单个元素就可以使用下标方式,通常会使用两种方法:从前向后取,或者从后向前去取。例如有字符串’abcdefg…xyz’,我们希望从前向后依次取前三个字符可以使用如下方式:
str1 = 'abcdefg...xyz'
str1[0] # 取第一个元素,注意下标要从0开始
str1[1] # 取第二个元素
str1[2] # 取第三个元素
而从后向前取每个元素,在一些编程语言里要先计算长度,根据最长长度减1、减2、减3 的方法取得倒数三个元素,在Python中,为了简化操作,直接使用-1、-2、-3做下标,省略了计算长度的步骤,如:
str1[-1] # 取最后一个元素
str1[-2] # 取倒数第二个元素
str1[-3] # 取倒数第三个元素
还有一些需求要取序列中一些连续的元素,如第一个到第五个元素时,不必单独取5次,这时需要使用”:”,即:
str1[0:5] # 第一个元素从0下标开始,到5下标前一个元素结束,5下标对应的元素不会被取出
如果要从第一个元素连续取到字符串的结尾可以使用
str1[0:] 或者 str[ : ] 方式
如果要从第一个元素连续取到字符串倒数第二个元素可以使用
str1[0:-1]
冒号在序列的作用就是取得连续元素的功能,也形象的叫做切片
作者回复: 第一个问题,序列从前往后取值用正数,从后往前可以用负数,如果是一个范围应该写作 xiao[-4:-1]
第二个问题,如果是想取猪狗鸡这里涉及到取最后一个值,要用xiao[-3:]
作者回复: python解释器配置的不正确,参考python安装视频和视频下方的课后答疑,在pycharm界面选择运行-窗口右侧的 python interpreter 选择正确的python.exe解释器
作者回复: 嗯,课程面向的是没有编程基础的同学,甚至非计算机专业的同学,所以会以最基础的讲解为主。距离掌握python高级技巧还是有些距离的,要根据未来应用的方向多补充相关模块和提高编码能力
作者回复: 很好,加油。
作者回复: 元组是不可变的,作业的目的是让大家对报错信息和元组功能要牢牢记住。因此对元组使用append()函数会告诉你没有这个属性,例如执行(1, 2, 3).append(4)就会产生响应的错误提示了
作者回复: 没有用过sniff模块哈,看提示应该是调用到 iface.is_invalid 这个地方报错了,可能要根据你的上下文来看下,是否需要这样调用你要实现它。
作者回复: 是的, 关于可变长参数参考:https://docs.python.org/zh-cn/3.6/tutorial/controlflow.html#default-argument-values
作者回复: 带了, 才是tuple格式,如果不带就变成了字符串了,如:
print(type(('极客时间')))
print(type(('极客时间',)))
输出结果是:
<class 'str'>
<class 'tuple'>
作者回复: 学会思考问题很重要,培养编程思路,培养良好的代码书写习惯。
作者回复: 文科也不用有负担,多写多练入门不难
作者回复: 字典属于映射(mappings)类型,不属于序列类型。
参考官方文档:
The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions.
-- 来源 :https://docs.python.org/3.6/library/stdtypes.html
序列顾名思义,是按照顺序存储的类型,而字典是映射的类型,是“无序”的。顺序的数据可以做索引和切片操作,这些都不是映射类型的主要功能和特点。
作为学习可以试试将对序列的操作应用在映射上,看看报错信息加深印象。
作者回复: 这种错误一版是你把"+""-""*""/"符号定义为对象,考虑到这节课的内容,应该是你的变量名含有"+""-""*""/" 导致出现语法错误,具体原因还是需要看到你的代码才能解答。
作者回复: 加油
作者回复: 这里有两个问题需要重新掌握一下,首先是报错的这个问题,由于a变量被赋值的字符串有6个字符,而你要把他们分配(unpack)给x1-x4四个变量,计算机也觉得很为难,所以它报错,a有太多的值,无法进行分配,当你的需求是想取第一个和第三个字符时,要明确说明unpack的变量和asdfgh字符串之间的对应关系;可以是x1-x6六个变量即x1,x2,x3,x4,x5,x6=a
也可以是前三个是确定的变量后面用通配,即
x1,x2,x3,*x4=a
注意x4前面的星号键
第二个问题既然已经unpack了字符串,那么x1和x3就分别代表了第一个和第三个字符,直接拿来用就行,比如print(x1)
如果需要从a变量做切片可以使用print(a[1])
不能将他们混在一起使用。