python学习笔记(二)

python入门之二

函数

定义函数

def greet_user():
    """问候一下下"""
    print("hello")
-----------------------------   greet_user()
hello

这是一个打印问候语的简单函数。

向函数传递信息

def greet_user(username):
    """问候一下下"""
    print("hello,"+username.title()+"~")

-----------------------
greet_user('nike')
hello,Nike~

实参和形参

就像在上面greet_user(username)中的username就是一个形参,后面输入的nike就是一个实参。。。其实吧可以理解为一个是抽象的一个是具体的。在这个函数greet_user('nike')中就是把'nike'传递给函数greet_user()然后被存储在形参username中。

返回值

就是用一个return语句将值返回到调用函数的代码行,这样可以简化主程序。
先来看一段代码吧

def get_formatted_name(first_name, last_name):
    """返回完整的名字"""
    full_name=first_name+' '+last_name
    return full_name.title()

player=get_formatted_name('stephen', 'curry')
print(player)
------------------
Stephen Curry

简单说明一下:前面几行代码就不说了,直接说return,调用这个函数,提供一个变量用来存储返回的值,也就是这里的player,顺便输出我最喜欢的一个篮球运动员库里嘻嘻嘻嘻嘻嘻。顺便说一下,这个函数可以返回任何东西,包括字典和列表。

创建和使用类

class Dog:
    """
    小狗
    """

    def __init__(self, name="haha"):
        self.name = name   

    def info(self):
        """信息"""         
        print("dog's name is " + self.name + '.')

# 实例化类
mydog = Dog("astro")

# 访问类的属性和方法
print(mydog.name)
mydog.info()

方法init()

类中的函数称为方法,init()是一个特殊的方法,作用是初始化实例对象,和c++的构造函数作用相同,也是在实例化对象的时候自动执行。

创建实例

mydog = Dog(“astro”)
这句话首先定义了一个变量mydog(变量是没有类型的,相当于一个指针,类型属于对象),然后使用实参”astro”调用Dog类中的方法__init__(self, name)创建一个实例,再将这个实例存储在变量mydog 中,最后mydog就可以访问属性和调用方法。

self用法

在方法中,形参self是必须的,而且必须位于第一个,创建实例和调用方法的时候都会自动传入实参self。
如果没有self,那么方法就具有了唯一性。假如说创建了两个对象,方法中会修改对象属性,这时调用方法打算修改一个对象的属性,而另外一个对象的属性不得不发生变化,这是不被允许的。所以说这个self是针对实例对象的,不同对象调用同一方法相互之间才不会产生影响。

属性指定默认值

name=”haha”指定了name的默认值为haha,实例化对象时就可以省略实参。默认值要赋给最右侧的形参。我的理解是这样,编译器是从左到右依次赋值给形参,如果默认值在最左边,那么依次赋值就会覆盖掉默认值,导致默认值失去作用以及右侧实参不够的问题,这样理解默认值应该放到最右侧感觉很合理,哈哈。此外c++也是指定默认值放最右侧,这些是编译器内部的问题了,记住就好。

文档字符串

使用三引号括起来,和c语言里面/* */很像,起到注释作用,和c语言注释不同的是,它可以通过调用print(mydog.__doc__)print(mydog.info.__doc__)打印注释信息。

继承

先来看代码吧,用代码来理解一哈哈

class Hair:
    def __init__(self, color):
        self.color = color

    def describe_hair(self):
        print("hair color is " + self.color)


class Hsq(Dog):     # 子类(基类)
    def __init__(self, name, color="blue"):
        super().__init__(name, age)
        self.color = Hair(color)

    def info(self):   # 重写父类方法
        print("dog's hair is " + self.color + '.')

mydog2 = Hsq("haha", "white")
mydog2.color.describe_hair()

子类init

创建子类实例后,首先要给父类的所有属性赋值。父类也称为超类(superclass),super()可以将父类和子类关联起来。调用父类的初始化代码就是super().__init__(name, age),注意这里没有self。

将实例用作属性

系统庞大之后,类的东西就会变得越来越多,比如说小狗喜欢吃什么口味的狗粮,早上几点起床之类的,这时就可以把相同类型的东西提取出来,包装成一个独立的类,使代码逻辑清晰,上述代码是把狗毛的颜色提取出来了,哈哈。

重写父类方法

在子类中只要定义了与父类的同名方法,就可以对父类方法进行重写。

类属性与方法

还是来看哈代码吧

class JustCounter:
    __secretCount = 0  # 私有变量
    publicCount = 0    # 公开变量

    def __foo(self):          # 私有方法
        print('这是私有方法')

    def foo(self):            # 公共方法
        print('这是公共方法')

私有属性

__private_attrs两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs

私有方法

__private_method两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods

类的专有方法

init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem : 按照索引获取值
len : 获得长度
cmp : 比较运算
call : 函数调用
add : 加运算
sub: 减运算
mul: 乘运算
div: 除运算
mod: 求余运算
pow: 乘方


   转载规则


《python学习笔记(二)》 Gsuhy 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录