python学习心得(2)

最近通过廖雪峰老师的网站学习python,顺便做一下自己的学习记录。

廖雪峰老师的网站:http://www.liaoxuefeng.com/


1.函数


(1)函数简介:

python定义和调用函数都很简单,以例为证:

def  my_power(x):
    return x * x

>>>print(my_power(9))
81

函数返回值可以是tuple或者list

def  my_power2(x,n):
	i = 1
	sum = x
	while i < n:
		sum *= x
		i+=1
	return(sum,n)


print(my_power2(5,3))

对于python的函数来说,其参数主要有3大类:默认参数,可变参数,和关键字参数

def  my_power(a,x=5,*list,**kw):

如上述函数所示,a为固定参数;

x为默认参数,可不输入,使x取默认值5;

list为传入的list或者tuple,长度不固定;

kw为传入的dict,可理解为将变量名一切传入,如:

my_power(1,2,*list,name='hehe',score=90)


(2)函数高级特性

python中函数储存在内存中,函数名只是指向函数的变量。因此可以将函数名赋值给另外的变量

>>>abs(10)
10
>>>a = abs
>>>a(-10)
10

因此,可以将函数作为参数或者返回值,形成了高阶函数的概念

def    f():
    print('hehe')
    
def    f1(func):
    print(func())
    
a = f
f1(a)

下面介绍几个高阶函数:

  1. map

map(f,list)

map第一个参数为一个函数,是对list中每个元素的操作,第二个参数为list,如:

>>>map(power,[1,2,3])
[1,4,9]

  2.   reduce

同map形式一样,第一个为对迭代操作函数,第二个参数为list,如:

>>>reduce(add,[1,2,3])
6

  3. filter

形式用法一样,第一个参数为返回布尔值得函数,返回的list将过滤掉返回值为false的list元素

  4. sorted

sorted(list,cmp)

第一个为将要进行排序的list,第二个参数为比较函数,list中相邻两个元素的排列将按cmp函数的返回布尔值进行排序


2.模块

python中,可以将每个文件作为一个模块,当模块间的命名冲突时,需要用到包。

同一包中,需要一个__init__.py文件来标志包,就可以将包与包分开


使用模块用到import,如

import sys
print(sys.args)

在引用时可以重命名,如

import cStringIO as StringIO


使用pip下载模块、使用模块这里不做总结


3.类


1.类的基础

类的概念与java相同,python同一有万物皆对象的观念,即所以类需继承object类:

class Student(object):
    def __init__(self,name):
        self.name = name
    def print_name(self):
        print('my name is %s ' % self.name)
        
>>>s = Student('hehe')
>>>s.print_name()
my name is hehe


Student后为该类所继承的类,可以继承多个类;

所有成员函数必须有self参数,类似与*this

__init__函数参数是实例创建的时候必须传入的初始化参数


在python中,成员变量访问限制通过在变量前增加“__”来实现,虽然编译器只是给限制变量更改名字来实现限制访问,并不能完全避免访问,但是一定程度上也保障了变量的安全性

...
self.__name=name
...


获取类信息的方法有三种:type()、isinstance()、dir()函数

>>>type(abs)
>>>isinstance(123,int)
>>>dir(int)

type用以返回参数的类型;isinstance返回布尔值,判断参数与类型是否对应;dir获取参数类的所有方法与变量


2.类的高级特性

python作为一种动态语言,可以在执行中为类添加方法

s = Student()
from types import MethodType
s.f = MethodType(function,s,Student)
#将函数添加给实例
Student.f = MethodType(function,None,Student)
#给类添加函数


通过__slots__可以限制为类添加的变量

...
__slots__ = ('name','score')
#只能给类添加name与score变量
...


成员函数的装饰器:

为了使成员变量变为属性(通过get/set访问变量),可以使用@property

class Student(object):

    @property
    def age(self):
        return selt._age
    #一定要加上‘_’
    
    @age.setter
    def age(self,age):
        self._age = age

    

这一样就能直接通过age来赋值和取值

>>>s.age = 20
>>>print(s.age)


关于廖老师讲的定制类与元类,只做简单的总结

类的定制类讲了一些,如

__str__(输出类信息);

__iter__(类的迭代访问,如 for i in s);

___getitem__(类的随机访问函数,如s[0]);

__call__(用实例名为名字的函数,如s())


这次的学习笔记就到这里,比较简陋,供个人复习用


转载于:https://my.oschina.net/u/2248183/blog/402153

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值