资讯专栏INFORMATION COLUMN

python 历险记——一个 Java 程序员的告白(一)

leejan97 / 1984人阅读

摘要:元组也支持内置函数的参数必须是一个序列字符串列表元组元组有什么用既然中有这么个数据结构,自然就有它的用武之地。

引言

想学爬虫还是 python 专业啊,之前一直在用 java, 现在决定尝尝鲜,使用 python及爬虫框架来完成网络数据采集。
编程语言之间都是相通的,比如都需要模块化,引入其他文件来实现功能,使用列表等容器来处理数据,都要使用 jsonxml 来解析和传输数据。
你会发现通过 类比 的方式,带着问题去学习,你会发现走的很快
而且我认为代码示例的作用是 异常强大的, 我会尽量使用代码示例的方式来展示,以满足同学快速学习的需要,也备后续查询。

下面就是在 使用 python 过程中的问题总结,okay,让我们一起来历险吧~

String 有哪些有用的方法?

不管是哪种语言,用的最多的类型估计都是 string (字符串),要想快速入门 python, 掌握 string 也是必须的。

在 java 中使用最多的 string 功能,我也会带着同样的疑问来了解 python 该使用什么方法实现。如果这里没有你要找的方法,可以到 python string 官方地址完整方法去查询

如何拼接字符串?

使用 + 号来拼接,要注意的是,当有数字的时候一定要转化为字符串格式 str(value) 才能够相加,不然会报错。

使用%进行拼接,和占位符的概念比较类似,这里举个栗子

hour = 9
minutes = 45
print("it"s %d:%d minutes!" %(hour, minutes))
如何分隔字符串?
# 对字符串分割
split_str = "a-b-c-d"
print(split_str.split("-"))
如何获取字符串长度
# 获取字符串的长度
print(len("banana"))
如何将 list 拼接成字符串
# 以 - 做间隔,拼接字符串
join_str_list = ["a", "b", "c", "d"]
print("-".join(join_str_list)) # 这里就是用 - 拼接后的值
如何分割字符串?
split_str = "a-b-c-d"
print(split_str.split("-"))
如何去除字符串中的空格?

去除字符串中空格分为 3 种

去除两端的空格

去除左边的空格

去除右边的空格

# 去除字符串中的空格
strToStrip = "   abc   "
print(strToStrip.strip()) # 去除两端空格
print(strToStrip.lstrip()) # 去除左边空格
print(strToStrip.rstrip()) # 去除右边空格
如何子字符串是否包含在父字符串中?
child_str = "abc"
print("abcd".find(child_str)) # 如果存在就返回首字母下标,不存在返回 -1
python 有哪些有用的容器?

学过 java 的都知道,在 java 中使用最多的容器有 List, Map, Set, Array,这些容器可以让我们方便的存储并操作数据,那么 python 中又有哪些类似的容器可供我们使用呢?

列表 list

python 中也有列表,功能包含了 java 列表,而且更牛的是它可以 包含不同类型的元素

["a", 10, 1.5] # 这就是一个列表,只需要方括号包起来即可
如何遍历一个列表

有两种方式可实现

for 循环的方式,这当然是最常见的

list = ["a", 1, 1.4]

for item in list:
  print(item)

在只需要读取列表的元素本身时这种方式当然很优雅。但如果需要获取元素的下标,就力不从心了,这就需要下面的方式。

使用内置函数 range 和 len, 操作元素下表

list = ["a", 1, 1.4]
for i in range(len(list)):
  list[i] = list[i] * 2
  print(list[i])
如何对列表切片?

pyton 中专门有切片操作符 :, 想切多厚切多厚,这可比 java 要方便不少。
通过例子来感受下吧。

alpha_list = ["a", "b", "c", "d", "e", "f", "g"]
print(alpha_list[1:3]) # ["b", "c"]
print(alpha_list[:4]) # ["a", "b", "c", "d"]
print(alpha_list[2:]) # ["c", "d", "e", "f", "g"]
print(alpha_list[:]) # ["a", "b", "c", "d", "e", "f", "g"]
如何给列表添加元素?

有四种方式

在列表尾部添加元素 append(value)

将一个列表中的每个元素分别添加到另一个列表上 extend(list)

将一个元素插入到列表的指定位置 insert(index, value)

+ 号,将两个 list 直接相加, 会返回一个新的 list 对象

码字太多了,自己都晕了,直接上代码。

list1 = ["a", "b", "c", "d"]
list1.append("e")
print(list1) # ["a", "b", "c", "d", "e"]

list2_1 = ["a", "b", "c", "d"] 
list2_2 = ["e", "f", "g"]
list2_1.extend(list2_2)
print(list2_1) # ["a", "b", "c", "d", "e", "f", "g"]


list3 = ["a", "c", "d"]
list3.insert(1, "b") # ["a", "b", "c", "d"] 
print(list3)

# 内存多余消耗,不推荐
list4_1 = ["a", "b"]
list4_2 = ["c", "d"]
print(list4_1 + list4_2) # ["a", "b", "c", "d"]
删掉元素

也有几种方法可实现

修改列表,弹出被删除的值 pop(index)

知道要删除的元素时 remove(value)

不需要使用删除的值时 del(index)

删除多个值 del(index_begin, index_end)

上代码

remove_list_1 = ["a", "b", "c"]
print(remove_list_1.pop(0))
print(remove_list_1)# ["b", "c"]

remove_list_2 = ["a", "b", "c"]
del remove_list_2[1]
print(remove_list_2)# ["a", "c"]


remove_list_3 = ["a", "b", "c"]
remove_list_3.remove("b")
print(remove_list_3) # ["a", "c"]

remove_list_4 = ["a", "b", "c"]
del remove_list_4[1:2]
print(remove_list_4)# ["a", "c"]
字典 dict

dict 和 java 中 Map 非常类似,也是由 keyvalue 组成的,也是
使用 散列表 的算法存储, 用过 java 的同学就直接把它当做 Java HashMap 来用就可以啦。另外,在语法上要比 java 也要简洁不少。

创建 dict 添加元素
a_dict = dict() # 这样就创建了一个空字典
a_dict["one"] = 1 # 塞进去一个元素

not_empty_dict = {"one": 1, "two": 2, "three": 3} # 这是一个包含数据的字典
遍历 dict

使用 for 循环遍历所有字典,可以遍历字典中的 key,这样的遍历是没有特定顺序的,如果想按照顺序遍历需要使用内置函数 sorted

d = {"b": 2, "a": 1, "c": 3}

for item_key in d:
  print(item_key, d[item_key])


for item_key in sorted(d):
 print(item_key, d[item_key])

那我如果想要遍历 dict 中的 values 呢?
还真有一个方法叫 values(), 它会返回一个值集合,并可以应用 in 操作符遍历

d = {"b": 2, "a": 1, "c": 3}

for value in d.values():
  print(value)

for sorted_value in sorted(d.values()):
  print(sorted_value)
元组

什么是元组? java 中可没有听过内置元组这样的数据结构。

在前面已经讲了列表,知道一个列表可以存储多个数据结构。元组和列表很像,但要记住它们间的一个重要区别: 元组是不可变的

如何创建元组?

把各个类型的元素用逗号分隔,就可以得到一个元组,为了好看,常常用括号再围起来

使用内置函数 tuple() 也可以创建元组

注意,由于元组是不可变的,无法修改它的元素。但我们可以使用将多个元组结合成一个新的元组。(元组也支持 +

tuple_a = 1, 2, 3, 4, 5

tuple_b = (1, 2, 3, 4, 5)

# tuple 内置函数的参数必须是一个序列
tupe_c = tuple("12345") # 字符串 
tuple_e = tuple([1, 2, 3, 4, 5]) # 列表
tuple_f = tuple((1,2,3,4,5)) # 元组

tuple_d = tuple_a + tuple_b
print(tuple_d)
元组有什么用?

既然 python 中有这么个数据结构,自然就有它的用武之地。还别说,它的用途还真不少。

交换变量对多个变量赋值 更方便,优雅了

a = 5
b = 4
a,b = b,a
# 等式左边是一个变量的元组
# 等式右边是表达式的元组,可以是(字符串,列表,元组都行)

c,d = (1,2), [1,2,3]
print(c)
print(d)

可以在函数中返回多个值,将它们装到元组里就行

def min_max(list):
  return min(list), max(list)

num_list = [3, 1, 5, 2]
print(min_max(num_list))
其他

上面讲述的都是一些大的主题,除了这些,还有一些相对小些的。
虽然小,但也很重要。这些小且重要的部分都在这个部分存放吧。

全局变量是如何处理的?

我们知道 java 中由于变量类型的存在,可以在一个 class 内声明全局变量,从而在 class 的各个方法中读取和赋值。

而这点在 python 中却是行不通的,因为 python 中没有变量类型, 如果在文件中声明一个全局变量,再在函数内对这个变量赋值,会直接导致错误产生。这是因为在函数内又重新创建了一个局部变量。读取全局变量也有这个问题。

那该怎么办呢?嗯~o( ̄▽ ̄)o global 关键字就要登场了。

在函数内部,使用全局变量前,先用 global 关键字声明下这个变量,表示这个变量是全局变量,后面再使用就 okay啦。

上栗子...

g_variable = 3

def test_g_variable():
  global g_variable
  print(g_variable) # 3
  g_variable = 2
  print(g_variable) # 2

test_g_variable()
结语

上面并没有把 python 讲完,还类和对象,文件JSON处理, XML 处理 等重要主题,这些会在下篇文章中涉及,敬请期待。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72018.html

相关文章

  • python 险记—— Java 序员告白

    摘要:元组也支持内置函数的参数必须是一个序列字符串列表元组元组有什么用既然中有这么个数据结构,自然就有它的用武之地。 引言 想学爬虫还是 python 专业啊,之前一直在用 java, 现在决定尝尝鲜,使用 python及爬虫框架来完成网络数据采集。编程语言之间都是相通的,比如都需要模块化,引入其他文件来实现功能,使用列表等容器来处理数据,都要使用 json 或 xml 来解析和传输数据。你...

    newtrek 评论0 收藏0
  • Java开发

    摘要:大多数待遇丰厚的开发职位都要求开发者精通多线程技术并且有丰富的程序开发调试优化经验,所以线程相关的问题在面试中经常会被提到。将对象编码为字节流称之为序列化,反之将字节流重建成对象称之为反序列化。 JVM 内存溢出实例 - 实战 JVM(二) 介绍 JVM 内存溢出产生情况分析 Java - 注解详解 详细介绍 Java 注解的使用,有利于学习编译时注解 Java 程序员快速上手 Kot...

    LuDongWei 评论0 收藏0
  • 【Pygame实战】嗷大喵险记序员吸猫指南:真太上头了~

    摘要:嗷大喵和他的小伙伴们快乐的生活在一起,他们总是能给大家带来欢乐。大家都说嗷大喵真棒。大家要做的就是解救嗷大喵远离恶龙。 导语 哈喽~大家好,我是木子,首先今天木子先给大家讲个小故事: 在喵界有这样一只网红——混迹于二次元、表情包界,贱萌活泼,调皮机灵,白色的大圆脸,脖子 上系了个铃铛,年龄不...

    dreamans 评论0 收藏0
  • java 基础 - 收藏集 - 掘金

    摘要:基础知识复习后端掘金的作用表示静态修饰符,使用修饰的变量,在中分配内存后一直存在,直到程序退出才释放空间。将对象编码为字节流称之为序列化,反之将字节流重建成对象称之为反序列化。 Java 学习过程|完整思维导图 - 后端 - 掘金JVM 1. 内存模型( 内存分为几部分? 堆溢出、栈溢出原因及实例?线上如何排查?) 2. 类加载机制 3. 垃圾回收 Java基础 什么是接口?什么是抽象...

    makeFoxPlay 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<