python学习--Day3

函数和模块的使用

将计算阶乘的功能封装到一个称之为“函数”的功能模块中,在需要计算阶乘的地方,只需要“调用”这个“函数”就可以了。

定义函数:

使用def关键字来定义函数,后面加函数名,一般都是通俗易懂,见名知意的名字,命名规则与变量的命名规则一样,在函数名候命的括号中加传递给函数的参数。中间是函数的执行体,用来计算需要的东西,最后通过return来返回一个结果,return可加可不加。

计算阶乘:

def factorial(num):

result = 1

    for n in range(1, num + 1):

        result *= n

    return result

 m = int(input('m = '))

n = int(input('n = '))

函数的参数:

Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要向其他语言一样支持函数的重载,因为在定义一个函数的时候可以让它有多种不同的使用方式。

摇骰子

from random import randint

def roll_dice(n=2):

 total = 0

    for _ in range(n):

        total += randint(1, 6)

    return total

def add(a=0, b=0, c=0):

    return a + b + c

在参数名前面的*表示args是一个可变参数

即在调用add函数时可以传入0个或多个参数

def add(*args):

    total = 0

    for val in args:

        total += val

    return total

print(add())

print(add(1))

print(add(1, 2))

print(add(1, 2, 3))

print(add(1, 3, 5, 7, 9))

用模块管理函数:
给函数命名时,有可能会遇到命名冲突的问题,最简单的就是在同一个.py的文件中定义两个同名函数,由于python没有函数重载的概念,那么后面的定义会覆盖之前的定义,也就意味着两个同名函数实际上只存在一个。

def foo():

    print('hello, world!')

 

def foo():

    print('goodbye, world!')

两个同名函数结果输出的只有goodbye,world。

Python中每个文件代表了一个模块,在不同的模块中可以有相同的函数名,在使用函数的时候可以通过import关键字导入指定的模块就可以区分到底要使用哪个模块中的函数。

如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是“main”。

字符串和常用数据结构:

Python表示文本信息的方式就是字符串类型,所谓**字符串**,就是由零个或多个字符组成的有限序列

字符串的使用方法:

def main():

    str1 = 'hello, world!'

    # 通过len函数计算字符串的长度

    print(len(str1))  # 13

    # 获得字符串首字母大写的拷贝

    print(str1.capitalize())  # Hello, world!

    # 获得字符串变大写后的拷贝

    print(str1.upper())  # HELLO, WORLD!

    # 从字符串中查找子串所在位置

    print(str1.find('or'))  # 8

    print(str1.find('shit'))  # -1

    # 与find类似但找不到子串时会引发异常

    # print(str1.index('or'))

    # print(str1.index('shit'))

    # 检查字符串是否以指定的字符串开头

    print(str1.startswith('He'))  # False

    print(str1.startswith('hel'))  # True

    # 检查字符串是否以指定的字符串结尾

    print(str1.endswith('!'))  # True

    # 将字符串以指定的宽度居中并在两侧填充指定的字符

    print(str1.center(50, '*'))

    # 将字符串以指定的宽度靠右放置左侧填充指定的字符

    print(str1.rjust(50, ' '))

    str2 = 'abc123456'

    # 从字符串中取出指定位置的字符(下标运算)

    print(str2[2])  # c

    # 字符串切片(从指定的开始索引到指定的结束索引)

    print(str2[2:5])  # c12

    print(str2[2:])  # c123456

    print(str2[2::2])  # c246

    print(str2[::2])  # ac246

    print(str2[::-1])  # 654321cba

    print(str2[-3:-1])  # 45

    # 检查字符串是否由数字构成

    print(str2.isdigit())  # False

    # 检查字符串是否以字母构成

    print(str2.isalpha())  # False

    # 检查字符串是否以数字和字母构成

    print(str2.isalnum())  # True

    str3 = '  jackfrued@126.com '

    print(str3)

    # 获得字符串修剪左右两侧空格的拷贝

    print(str3.strip())

除了字符串,Python还内置了多种类型的数据结构,如果要在程序中保存和操作数据,绝大多数时候可以利用现有的数据结构来实现,最常用的包括列表、元组、集合和字典。

使用列表:

def main():

    list1 = [1, 3, 5, 7, 100]

    print(list1)

    list2 = ['hello'] * 5

    print(list2)

    # 计算列表长度(元素个数)

    print(len(list1))

    # 下标(索引)运算

    print(list1[0])

    print(list1[4])

    # print(list1[5])  # IndexError: list index out of range

    print(list1[-1])

    print(list1[-3])

    list1[2] = 300

    print(list1)

    # 添加元素

    list1.append(200)

    list1.insert(1, 400)

    list1 += [1000, 2000]

    print(list1)

    print(len(list1))

    # 删除元素

    list1.remove(3)

    if 1234 in list1:

        list1.remove(1234)

    del list1[0]

    print(list1)

    # 清空列表元素

    list1.clear()

    print(list1)

生成器: 

f = (x ** 2 for x in range(1, 1000))

    print(sys.getsizeof(f))  # 相比生成式生成器不占用存储数据的空间

    print(f)

    for val in f:

        print(val)

Python中还有另外一种定义生成器的方式,就是通过`yield`关键字将一个普通函数改造成生成器函数

使用元组:

def main():

    # 定义元组

    t = ('梁浩田', 22, True, '内蒙古呼和浩特')

    print(t)

    # 获取元组中的元素

    print(t[0])

    print(t[3])

    # 遍历元组中的值

    for member in t:

        print(member)

    t = ('lht', 22, True, '凉城')

    print(t)

    # 将元组转换成列表

    person = list(t)

    print(person)

    # 列表是可以修改它的元素的

    person[0] = 'll'

    person[1] = 23

    print(person)

    # 将列表转换成元组

    fruits_list = ['aaa', 'bbb', 'ccc']

    fruits_tuple = tuple(fruits_list)

    print(fruits_tuple)

使用集合:

def main():

    set1 = {1, 2, 3, 3, 3, 2}

    print(set1)

    print('Length =', len(set1))

    set2 = set(range(1, 10))

    print(set2)

    set1.add(4)

    set1.add(5)

    set2.update([11, 12])

    print(set1)

    print(set2)

    set2.discard(5)

    # remove的元素如果不存在会引发KeyError

    if 4 in set2:

        set2.remove(4)

    print(set2)

    # 遍历集合容器

    for elem in set2:

        print(elem ** 2, end=' ')

    print()

    # 将元组转换成集合

    set3 = set((1, 2, 3, 3, 2, 1))

    print(set3.pop())

    print(set3)

    # 集合的交集、并集、差集、对称差运算

    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))

 

原文地址:https://www.cnblogs.com/4443056bdH/p/11285204.html