前几天因为点儿事情耽误了些时间,今天就是第三天了,开始函数的练习。
函数是可以实现某些功能的可以重用的代码集合,编写函数有助于我们书写代码更简洁,漂亮。事实上打开python世界的时候我们就已经接触过函数了——print函数。我们可以定义自己的函数,称作用户自定义函数。
定义函数的简单规则(取自菜鸟教程):
def function_name(parameters):
"""函数说明"""
function_suite
return [expression]
定义一个计算阶乘的函数
def factorial(num):
"""
求阶乘
:param num:非负整数
:return: num的阶乘
"""
result = 1
for n in range(1, num +1):
result *= n
return result
函数的参数可以设定默认值,比如下面定义一个计算加法的函数
def add(num1=1, num2=1):
"""计算加法,如果不输入函数值,就会返回2"""
return num1 + num2
还有参数的个数不确定的时候,我们需要用到可变参数
def add(*args):
total = 0
for val in args:
total += val
return total
我们可以定义无参数的函数
def hello():
print("hello, world!")
匿名函数的情况使用lambda(取自菜鸟教程)
lambda [arg1 [,arg2,.....argn]]:expression
比如上面我们两位相加的函数可以这样定义
sum = lambda num1, num2: num1 + num2
当调用的时候就可以使用这样的方式sum(1, 2)
模块我的理解就像是方法的集合,比如这个模块里面我定义了几个方法,分别都是做什么用的,在其他模块中我们就可以通过import导入这个模块中的方法,而且不同的模块中的方法不起冲突,只有在引用的时候给方法起名不冲突就可以了
module1.py
def hello():
print("hello, world!")
module2.py
def hello():
print("hello, python!)
test.py
import module1 as m1
import module2 as m2
m1.hello()
m2.hello()
这是不起冲突的情况,当起冲突的时候是这样引入的
from module1 import hello
form module2 import hello
hello()
这时候我们调用的是module2的方法,而不是module1的方法,因为第二次引用hello就将第一次的引用覆盖掉了。
还记得我的模块是怎么编写的嘛
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
pass
if __name__ == "__main__":
main()
大体框架是这样的,要是我们定义的模块中还有可以直接运行的代码,那么在导入模块的时候就会执行这些代码,可能我们并不希望这些代码被执行,所以就需要上面这种格式,只有直接运行该模块的时候,if下面的方法才会执行,那些需要在本模块执行的代码可以编写在main函数下。
字符串用的那可是相当多了,方法也是特别的多,所谓字符串,就是由零个或多个字符组成的有限序列。下面就来了解一下字符串的基本使用
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
str1 = "hello, world!"
# len函数计算长度
print("%s的长度为:%d" % (str1, len(str1)))
# 获得字符串首字母大写的拷贝
print(str1.capitalize())
# 获得字符串全部大写的拷贝
print(str1.upper())
# 从字符串中查找子串所在位置
print(str1.find('orl'))
print(str1.find('els'))
# 返回子串的索引,若查找不到会有异常
print(str1.index('or'))
# print(str1.index('shit')) 异常
# 检查字符串是否以指定的字符串开头
print(str1.startswith('hell'))
print(str1.startswith('sas'))
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!'))
print(str1.endswith('123'))
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
str2 = 'abcd1234'
# 获取指定位置的字符
print(str2[2])
# 字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:6])
print(str2[2:])
print(str2[2::2])
print(str2[::2])
print(str2[::-1])
print(str2[-3:-1])
# 检查字符串是否由数字构成
print(str2.isdigit())
# 检查字符串是否以字母构成
print(str2.isalpha())
# 检查字符串是否以数字和字母构成
print(str2.isalnum())
# 修剪字符串两边的空格
str3 = " sdf "
print(str3.strip())
if __name__ == "__main__":
main()
代码演示不多说
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
list1 = [1, 2, 3, 4, 123]
print(list1)
list2 = ['hello'] * 5
print(list2)
# 计算列表长度(元素个数)
print("list1的长度为:", len(list1))
# 下标(索引)运算
print(list1[0])
print(list1[3])
print(list1[-1])
print(list1[-4])
# 修改
list1[2] = 123123
print(list1)
# 添加元素
list1.append('11111')
list1.insert(0, 8888)
list1 += [400, 500]
print(list1)
# 删除元素
list1.remove(2)
del list1[0]
print(list1)
# 清空列表元素
list1.clear()
print(list1)
if __name__ == "__main__":
main()
上面的是基本的操作,接下来演示列表切片操作。
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
nums = [1, 2, 3, 4, 5, 6, 7]
for num in nums:
print(num, end=" ")
print()
# 列表切片
nums1 = nums[2:5]
print(nums1)
# 通过切片进行复制列表
nums2 = nums[:]
print(nums2)
nums3 = nums[-1:-3]
print(nums3)
# 反向切片进行列表倒转
nums4 = nums[::-1]
print(nums4)
if __name__ == "__main__":
main()
列表排序
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:列表排序
def main():
list1 = ['orange', 'apple', 'zoo', 'zebra', 'egg']
list2 = sorted(list1)
print(list2)
# 倒置
list2 = sorted(list1, reverse=True)
print(list2)
# 通过key关键字根据指定字符串长度进行排序而不是默认的字母表顺序
list2 = sorted(list1, key = len)
print(list2)
# 对列表直接进行排序
list1.sort()
print(list1)
if __name__ == "__main__":
main()
根据列表的生成式语法创建列表,代码如下
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:列表的生成式语法创建列表
import sys
def main():
list1 = [x for x in range(1, 15)]
print(list1)
list2 = [x + y for x in 'abcd' for y in '1234']
print(list2)
# 用列表的生成表达式语法创建列表容器
# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x ** 2 for x in range(1, 1000)]
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f)
# 请注意下面的代码创建的不是一个列表而是一个生成器对象
# 通过生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)
if __name__ == "__main__":
main()
元组和列表类似,不同之处在于元组的元素不能修改。
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:元组
def main():
# 定义元组
t = (1, 'abc', 1.2, [1, 2, 'a'])
# 根据索引获取
print(t[1])
# 遍历元组中的值
for item in t:
print(item)
# 元组转换列表
list1 = list(t)
print(list1)
# 列表转换元组
list1[1] = "哈哈"
t = tuple(list1)
print(t)
if __name__ == "__main__":
main()
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:集合操作
def main():
set1 = {1, 2, 3, 3, 2, 23, 12}
print(set1)
# len获取长度
print('集合的长度是:', len(set1))
# 列表转换集合
list1 = [1, 2, 3, 4, 23, 1]
set2 = set(list1)
print(set2)
# 元组转换集合
tuple1 = (1, 2, 3, 12, 34)
set2 = set(tuple1)
print(set2)
# 集合添加元素
set2.add(123)
set2.update([1, 1123])
print(set2)
# 集合删除元素
set2.remove(123)
set2.discard("abf")
print(set2)
# 遍历集合
for item in set2:
print(item)
# 集合交集、并集、差集、对称差运算
set3 = {1, }
print(set1 & set2)
# print(set1.intersection(set2))
print(set1 | set2)
# print(set1.union(set2))
print(set1 - set2)
# print(set1.difference(set2))
print(set1 ^ set2)
# print(set1.symmetric_difference(set2))
# 判断子集和超集
print(set2 <= set1)
# print(set2.issubset(set1))
print(set3 <= set1)
# print(set3.issubset(set1))
print(set1 >= set2)
# print(set1.issuperset(set2))
print(set1 >= set3)
# print(set1.issuperset(set3))
if __name__ == "__main__":
main()
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:字典
def main():
dict1 = {'a': 1, 'b': 2, 'c': 3}
print(dict1['a'])
for elem in dict1:
print(elem, dict1[elem])
# 修改
dict1['c'] = 'asdf'
print(dict1)
# 添加
dict1['d'] = "ads"
print(dict1)
# 获取
print(dict1["a"])
print(dict1.get('a', 111))
# 删除
print(dict1.popitem())
print(dict1.popitem())
print(dict1.pop('a', 111))
print(dict1)
# 清空
dict1.clear()
print(dict1)
if __name__ == "__main__":
main()
因为耽误了几天,所以今天算是学的第三天,列表,字典,集合,元组,字符串,这几种数据类型很常用,要记住啊!
如果你发现我的文章哪里有错误或者有什么好的想法可以联系我,我们一起学习共同进步,我的邮箱地址是[email protected]
let’s do more of those!