Python基础知识二

一. 字典

1.字典是存储信息的一种方式。
2.字典以键-值对存储信息,因此字典中的任何一条信息都与至少一条其他信息相连。
3.字典的存储是无序的,因此可能无法按照输入的顺序返回信息。

字典的 基本用法:创建 / 输出 / 插入新的键-值对 / 修改值 / 修改键名 / 删除项

python_words = {'list': '相互没有关系,但具有顺序的值的集合',
                'dictionary': '一个键-值对的集合',
                'function': '在 Python 中定义一组操作的命名指令集',
                }
                
print("\n名称: %s" % 'list')
print("解释: %s" % python_words['list'])

嵌套
嵌套包括把列表或字典放在另一个列表或字典中。
值为列表的字典

sparse_matrix[0] = {1: 12.3, 23: 25.5}
sparse_matrix[1] = {3: 12.0, 15: 25.5}
# 打印出来看下上述字典的样子
print('sparse_matrix = {')
for key, value in sparse_matrix.items():
    print(key,':',value)
print('}')
# 通过 字典名[词条名][词条内属性名] 访问
print(sparse_matrix[0][23])
二. 函数

定义一个函数
^ 使用关键字 def 告诉 Python 你将要定义一个函数。
^ 给你的函数起一个名字。给函数需要的数据起名称。
它们是变量名,而且只在函数里用。
^ 这些名称被称为函数的 参数(arguments)
^ 确保函数的定义以冒号结束。
在函数内部,写下任意你想要的代码。
使用你的函数
函数名后跟圆括号调用函数。
在圆括号中,给出函数运行需要的数据。
函数中的参数可以是变量,也可以是实际的数据。

def thank_you(name):
    # This function prints a two-line personalized thank you message.
    print("\nYou are doing good work, %s!" % name)
    print("Thank you very much for your efforts on this project.")
    
thank_you('Adriana')
thank_you('Billy')
thank_you('Caroline')

参数缺省值

def thank_you(name='everyone'):
    # This function prints a two-line personalized thank you message.
    #  If no name is passed in, it prints a general thank you message
    #  to everyone.
    print("\nYou are doing good work, %s!" % name)
    print("Thank you very much for your efforts on this project.")
    
thank_you('Billy')
thank_you('Caroline')
thank_you()

函数在使用前一定要先声明
和 c++ 中函数的用法相似 返回值 函数名 参数(缺省 位置对应) 函数体
更加方便:关键字参数,可以不按照顺序传参

def describe_person(first_name, last_name, age):
    # This function takes in a person's first and last name,
    #  and their age.
    # It then prints this information out in a simple format.
    print("First name: %s" % first_name.title())
    print("Last name: %s" % last_name.title())
    print("Age: %d\n" % age)

describe_person(age=71, first_name='brian', last_name='kernighan')
describe_person(age=70, first_name='ken', last_name='thompson')
describe_person(age=68, first_name='adele', last_name='goldberg')

接受任意数量的参数
接受任意长度的序列
可以让函数接受任意数量的参数。如果我们在参数列表的最后一个参数前加 一个星号,这个参数就会收集调用语句的剩余参数并传入一个元组。(剩余参数是指匹配过位置参数后剩余的参数)
接受任意数量的关键字参数
最后一个参数前有 两个星号,代表着收集调用语句中剩余的所有键值对参数。这个参数常被命名为 kwargs 。这些参数键值对被存储在一个字典中。我们可以循环字典取出参数值。

def example_function(arg_1, arg_2, **kwargs):
    # Let's look at the argument values.
    print('\narg_1:', arg_1)
    print('arg_2:', arg_2)
    for key, value in kwargs.items():
        print('arg_3 value:', value)
    
example_function('a', 'b')
example_function('a', 'b', value_3='c')
example_function('a', 'b', value_3='c', value_4='d')
example_function('a', 'b', value_3='c', value_4='d', value_5='e')
三. 类

关键字 class,数据和函数没有分开,直接定义函数中包含你所需要的操作,在操作中声明你所需要用到的数据。类名开头必须为大写而且不能包含下划线,同样有类的“继承”。

class Rocket():
         # Rocket simulates a rocket ship for a game,# Rocket 
    #  or a physics simulation.
    
    def __init__(self):
        # Each rocket has an (x,y) position.
        self.x = 0
        self.y = 0
        
    def move_up(self):
        # Increment the y-position of the rocket.
        self.y += 1
        
# Create a fleet of 5 rockets, and store them in a list.
my_rockets = [Rocket() for x in range(0,5)]

# Show that each rocket is a separate object.
for rocket in my_rockets:
    print(rocket)

前后都有两个下划线的函数是内置在 Python 中的有特殊用途的函数。init() 函数就是一个特殊的函数。当创建一个类的对象时,它会自动执行。我们可以称之为 初始化函数,在对象使用之前初始化一些必要的属性。在这个例子中,init() 函数初始化了 x 和 y 属性。
关键字 self 类似this指针,可以指向当前对象,供我们访问类的属性。

from math import sqrt

class Rocket():
    # Rocket simulates a rocket ship for a game,
    #  or a physics simulation.
    
    def __init__(self, x=0, y=0):
        # Each rocket has an (x,y) position.
        self.x = x
        self.y = y
        
    def move_rocket(self, x_increment=0, y_increment=1):
        # Move the rocket according to the paremeters given.
        #  Default behavior is to move the rocket up one unit.
        self.x += x_increment
        self.y += y_increment
        
    def get_distance(self, other_rocket):
        # Calculates the distance from this rocket to another rocket,
        #  and returns that value.
        distance = sqrt((self.x-other_rocket.x)**2+(self.y-other_rocket.y)**2)
        return distance
    
class Shuttle(Rocket):
    # Shuttle simulates a space shuttle, which is really
    #  just a reusable rocket.
    
    def __init__(self, x=0, y=0, flights_completed=0):
        super().__init__(x, y)
        self.flights_completed = flights_completed
        
shuttle = Shuttle(10,0,3)
print(shuttle)

当一个子类要继承父类时,在定义子类的圆括号中填写父类的类名,新类的 init() 函数需要调用新类的 init() 函数。新类的 init() 函数接受的参数需要传递给父类的 init() 函数。由 super().init() 函数负责。

面向对象基础

常用术语
class:类。类是代码块的主体,其中定义了建立的模型的属性和行为。这个模型可以来自于真实世界,也可以是虚拟游戏等。
attribute*:属性。是一系列信息的集合。在类中,一个属性通常是一个变量。
behavior:行为。行为是定义在类中,组成方法的部分。也即是定义在类中函数的一部分。
method:方法。类中的函数,由 behavior 组成。
object:对象。对象是类的实例。一个对象中包含所有类中属性的值。你可以为一个类创建任意数量的对象。

模块

当你将类存储在一个单独的文件中时,这个文件就被称为一个 模块(module)。在一个模块中可以写入任意数量的类。而且有很多方式在程序中导入模块中的类。
将 Rocket 类存进一个称之为 rocket.py 的文件。模块的名字是小写的单词,类名是以大写字母开头的。

class Rocket():
    
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
        
    def move_rocket(self, x_increment=0, y_increment=1):
        self.x += x_increment
        self.y += y_increment
        
    def get_distance(self, other_rocket):
        distance = sqrt((self.x-other_rocket.x)**2+(self.y-other_rocket.y)**2)
        return distance

from rocket import Rocket

rocket = Rocket()
print("The rocket is at (%d, %d)." % (rocket.x, rocket.y))

导入模块和类的方法
1.直接导入模块+类名
2.只导入模块,再利用点引用类
3.使用 as 给模块重新命名
4.用*导入模块中的所有类和函数

四. 异常

异常是可以修改程序控制流程的事件。
在 Python 中,异常可以被错误自动触发,也可以由代码手动触发。
try/except:捕捉并恢复 Python 自动触发的或自己代码中的异常。
try/finally:无论异常是否发生,执行清理操作。
raise:手动触发一个异常。
with/as:在 Python 2.6 ,3.0 或更新的版本中实现上下文管理器。

有c++的基础之后基本知识点都还比较好理解,剩下需要多动手写,熟练掌握。

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

推荐阅读更多精彩内容