Q:python中“函数”这个概念是什么东西?
A:
与其他编程语言的“函数”一样,python中的 “函数”也是一些可以完成某些功能的代码片段。我们秩序在需要使用函数的地方调用函数,并提供必须的原材料(参数),就可以得到想要的结果。
有了函数,我们可以把解决某一类特定问题的对应的代码打包起来,想用的时候就直接拿来,而不必再次编写同样的代码。一次编写,多次使用,体现了程序员“懒惰”的美德。
Q:如何创建一个函数?
A:
考察一个例子——
def add(x, y): #求两数相加的和的函数
return x + y #返回x+y的和
def max(x, y): #求两数的最大值
if x > y:
return x #若x大则返回x
elif y > x or y == x:
return y #若y大则返回y
z1 = add(2, 3)
z2 = max(2, 3)
print z1
print z2
#输出:
#5
#3
一个函数的构造就是使用def关键字,后面接着函数的名字,接着是一个括号,里面是函数运行时需要用到的数据,最后是一个冒号,然后在函数体里面写代码。
def functionName(argument1, argument2,...): #定义函数,名为functionName,需要用到参数argument1,argument2......
调用函数时只需要写出函数名,并且提供相应的参数即可。函数大多会返回一些值,就好像我们使用数学中的函数一样,当我们把"x = 3"代入函数“f(x) = 2 * X + 1”一样会得到计算结果2 * 3 + 1 = 7。
如此看来,其实编程学科里的“函数”,和数学中的“函数”,可以说是一样的。此“函数”即彼“函数”。
Q:使用函数时有没有那些特别的技巧?
A:
1、定义方法时的需要的参数个数可以是可变的。
def add(*args):
print args
for x in args:
sum += x
print add(1,2,3) #输出结果: (1,2,3) 6
print add(1,2,3,4,5,6) #输出结果 : (1,2,3,4,5,6) 21
在这段代码里,add的括号里的参数是“*args”,而在调用这个函数时,可以传入不定个数的参数。这些参数在传入过程中会在python内部打包成一个元组,储存在args变量里。所以在代码中print args
时会打印出一个元组。
2、函数可以嵌套,函数可以返回另一个函数。也就是说函数内部可以再定义一个函数,然后外层函数把内层函数当作返回值返回给调用外层函数的代码段。这就是“函数式编程”。python中的装饰器就是函数式编程的一种应用。作为一种高度抽象的编程技术,我也不怎么懂······
Q:听说python是一门面向对象编程语言,那么它和Java这些纯面向对象编程语言有什么异同吗?
A:
python和Java最大的不同在于Java的代码必须全部写在类里面,通过调用某个代码文件的main方法来调用其他方法,如此实现程序的运行;python 则不必如此,毕竟它是一种脚本语言,可以存在不在类里面的指令。程序的运行,一般而言,也是从头到尾一条一条指令运行的。
python和Java的相同在于两者面向对象的成分都大同小异,都有类、对象、封装、继承、多态、接口这些面向对象程序设计的基本概念,实现起来的方式也差不多。不过python支持多重继承。
类就是一张图纸,我们根据图纸来创建实例(对象)
Q:一个python类是什么样子的?
A:
看看下面的例子——
class Person(object): #定义一个类,名为Person,继承自类object
def __init__(self, name, gender, salary, age): #构造函数
self.name = name #创建实例变量并复制
self.gender = gender
self.__salary = salary #变量名前有两根下划线,是私有变量
self.__age = age
def print_salary_age(self): #一个打印salary和age的私有方法
print 'salary:'+self.__salary+' age: '+self.__age
def describ_self(self): #类中每个方法都必有一个参数self
print 'name: '+self.name+' gender: '+self.gender
self.print_salary_age()
这就是一个典型的,简单的例子。可以这样使用一个类——
man = Person('Tom','male','10000','20')
Tom.describ_self()
print Tom.name
print Tom.gender
#输出
#name: Tom gender: male
#salary:10000 age: 20
#Tom
#male
python类通过关键字“class”定义,后面加类名,类名后跟这一个括号,里面是这个类的父类的类名。python3里默认所有类都继承自object类。python2则需要显式声明。
一个定义在类里面的函数可以称为方法,凡是方法,在定义时必须在括号里写上一个参数self,这个参数是对象自己的引用,我们在类中如果要使用某个实例变量,需要用self.variable来访问,而调用类里面某个方法时需要self.method()。我们在调用类的方法时不需要传入self,只需要传入剩余的参数即可。self由python自己传入。
本例创建了一个Person类,通过构造方法init来初始化Person的实例,给其赋予实例变量(在Java中称类的属性)。实例变量的添加可以不在init方法完成,但一般来说都使用init初始化。
类中变量名前带双下划线的变量,如__variable,是类的私有变量。私有变量只能在类内部被使用,类外部的代码不能使用类的私有变量。私有方法的定义和使用同私有变量。
函数以及类-对象是编程中抽象艺术(隐藏细节、分离设计与实现)的体现,还有更多机制和功能等待我们探索。
2016-10-8