学习Python第二周的总结

函数

  • 定义:具有相对独立功能的模块
  • 定义函数的意义:这样做的好处一是减少重复代码的编写,二是将来可以重复的使用这些功能模块
  • 关键字 def
  • 函数的命名规则和变量命名是一样的
  • 格式:
        #main是函数名,(参数) 
        def main():
            rerurn 
       #通过下面的if条件可以在导入模块时不执行下面的代码
        if __name__ = '__main__':
           main()
    
  • 定义求阶乘的函数 - 将求阶乘的功能抽取出来放到函数中
"""
给定义的函数添加注释
"""

def factorial(x):
    """
    计算阶乘
    :param x: 一个非负整数
    :return: x的阶乘
    """
    y = 1
    for num in range(1, x + 1):
        y *= num
    return  y


#通过下面的if条件可以在导入模块时不执行下面的代码
if __name__ == '__main__':
- 当需要计算阶乘的时候不用在写循环而是直接调用已经定义好的函数
  • 在设定函数的时候如果不知道参数的个数的话,就可以用*(可变参数)
def f(*args):
    total = 0
    for val in args:
        total += val
    return total
    
 -  函数不能直接调用列表参数,如果要调用列表参数,通过*把列表里的元素一个个的传递给函数并执行  
    my_list = [1, 3 , 5 , 7]
    print(f(*my_list)

a = 100
def f():
    
    global a
    a = 200
    b = 'hello'
    
    def f():
        nonlocal b# 嵌套
        b = 'good'
  • 函数的递归调用:函数直接或者间接的调用的行为就是递归调用

模块 - 一个文件就是一个模块

  • 关键字 import from ...import import...as

字符串

  • 由零个或者多个字符组成的有限序列
    我们可以通过下面的代码来了解字符串的使用:
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())


if __name__ == '__main__':
    main()

列表

  • 由零个或者多个元素构成的有限序列
    下面的代码演示了如何定义列表、使用下标访问列表元素以及添加和删除元素的操作
def main():
    f = [100, 200, 500]
    for index ,val in enumerate(f):#枚举
        print(index, ':', val)
    #CRUD操作(Create Read Update Delete)
    f.append(300)#追加元素,放在最后
    f.insert(0, 400)#指定位置添加元素
    if 500 in f:#不知道是否有这个元素,就用if - in 判断再删除
        f.remove(500)#删除元素
    del f[3]#如果知道这个元素的位置,直接用del删除
    #print(f.index(100, 3 , 5))#如果在该范围内没有100这个元素,程序就会报错
    #f.clear()#清空列表中的元素
    print(f.pop())#默认删除最后一个元素,如果在给定范围没有元素,程序就会报错
    print(f)

if __name__ == '__main__':
    main()

我们还可以使用列表的生成式语法来创建列表,代码如下所示。

import sys

# 时间和空间是不可调和的矛盾
# 软件和硬件在逻辑上是等效的

def main():
    f = list(range(1,10))
    print(f)
    #列表生成式语法: 用列表的生成表达式语法创建列表容器
    #用这种语法创建之后元素已经准备就绪,所以需要耗费较多的空间
    f = [x for x in range(1, 10)]
    f2 = [x ** 2 for x in range(1,100)]
    f3 = [x ** x for x in range(1,10)]
    print(f)
    print(f2)
    print(sys.getsizeof(f2))#getsizeof这个函数查看对象占得内存
    print(f3)
    #列表生成器(generator)语法:这里得到的不是一个列表,而是一个生成器对象
    #通过生成器可以获取到数据,他不占用额外的空间存储数据
    #每次需要数据的时候通过生成器获取数据,所以要耗费更多的时间
    f = (x ** 2 for x in range(1,100))
    print(f)
    print(sys.getsizeof(f))
    # for val in f:
    #     print(val)


if __name__ == '__main__':
    main()


def main():
    f = [x+y for x in 'ABCDE' for y in '1234567']
    print(f)


if __name__ == '__main__':
    main()

元组

  • Python 的元组与列表类似,不同之处在于元组的元素不能修改,在前面的代码中我们已经不止一次使用过元组了。顾名思义,我们把多个元素组合到一起就形成了一个元组,所以它和列表一样可以保存多条数据。下面的代码演示了如何定义和使用元组


def main():
    # 定义元组
    t = ('Kyle', 23, True, '四川成都')
    print(t)
    # 获取元组中的元素
    print(t[0])
    print(t[3])
    # 遍历元组中的值
    for member in t:
        print(member)
    # 重新给元组赋值
    # t[0] = 'Kris'  # TypeError
    # 变量t重新引用了新的元组原来的元组将被垃圾回收
    t = ('Kris', 20, True, '河南郑州')
    print(t)
    # 将元组转换成列表
    person = list(t)
    print(person)
    # 列表是可以修改它的元素的
    person[0] = '李小龙'
    person[1] = 25
    print(person)
    # 将列表转换成元组
    fruits_list = ['apple', 'banana', 'orange']
    fruits_tuple = tuple(fruits_list)
    print(fruits_tuple)


if __name__ == '__main__':
    main()

集合

Python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算

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


if __name__ == '__main__':
    main()

字典

字典是另一种可变容器模型,类似于我们生活中使用的字典,它可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。下面的代码演示了如何定义和使用字典

def main():
   dict1 = {'name': 'Kyle', 'age': 23, 'gender': True}
    # 通过键可以获取字典中对应的值
  print(dict1['name'])
    print(dict1['age'])
    print(dict1['gender'])
    # 对字典进行遍历(遍历的其实是键再通过键取对应的值)
    for x in dict1:
        print('%s\t--->\t%d' % (x, dict1[x]))
    # 更新字典中的元素
    dict1['Eric'] = 65
    dict1['Angel'] = 71
    dict1.update(Musk=67, Jobs=85)
    print(scores)
    if 'Tesla' in dict1:
        print(dict1['Tesla'])
    print(dict1.get('Tesla'))
    # get方法也是通过键获取对应的值但是可以设置默认值
    print(dict1.get('Tesla', 60))
    # 删除字典中的元素
    print(dict1.popitem())
    print(dict1.pop('Kyle', 100))
    # 清空字典
   dict1.clear()
    printdict1)


if __name__ == '__main__':
    main()

内存管理

  • 栈 - 地址 - 对象的引用

  • 堆 - 真正的对象

  • id()函数和is运算符(寻找对象的地址和变量名是否引用同一地址的方法) - 验证身份

  • 静态区

面向对象的编程的基础

#Step 1, 定义类
#类是对象的蓝图和模板,有了类就可以创建对象
#定义类需要做两件事情,数据抽象和行为抽象
#数据抽象 - 抽取对象共同的静态特征(找名词) - 属性
#行为抽象 - 抽取对象的共同的动态特征(找动词)- 方法
#定义类的关键字 - class - 类名(每个单词的首字母都要大写)


class Student(object):

    #构造方法(构造器/构造子 - constructor)
    #调用方法的时候不是直接使用方法的名字而是使用类的名字
    def __init__(self,name, age):
        #给对象绑定属性
        self.name = name #给对象添加行为之前给对象添加name,age属性
        self.age = age
    #我们定义一个方法就代表了对象可以接受这个消息
    #对象的方法的第一个参数都是统一写成self
    #它代表了接收消息的对象 - 对象.消息(参数)
    def study(self, course): #在类里面给对象定义的函数叫做方法
        print('%s正在学习%s' % (self.name, course)) #行为

    def watch_tv(self):
        if self.age >= 18:
            print('%s正在观看cctv5' % self.name)
        else:
            print('%s,我们推荐你看《熊出没》' % self.name)




def main():
    #Step2 - 调用构造方法创造学生对象,实际使用的是__init__方法
    stu1 = Student('Kyle', 23)#创造对象

    #Step 3 给对象发出消息
    #通过给对象发消息让对象完成某些工作
    #解决任何的问题都是通过让对象去做事情
    stu1.study('Python程序设计')
    stu2 = Student('Kris', 16)
    stu2.study('英语')

    stu2.age = 19
    stu2.name = 'Kris'
    stu2.watch_tv()



if __name__ == '__main__':
    main()


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,579评论 1 118
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,219评论 4 16
  • 勤俭,是中华民族的传统美德,也是人类生存发展的根本,而勤奋,会使人成长更快,变得更优秀。勤奋有时候是先天资质,有时...
    可比克克阅读 610评论 5 2
  • 苍鹰啊! 你可以在天空翱翔, 而我呢,只能在地洞里躲藏! 是的,躲藏! 你可以去享受阳光, 而我呢,只能在黑暗里偷...
    刘汉皇阅读 126评论 0 1
  • 闲暇之余,找了些服装搭配的课程来学,都说优雅是一个女人的尊严。此处我要申明,我学习它是因为兴趣,这就好像是在探寻自...
    cherry连子阅读 463评论 0 1