Python入门问答录(二)

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

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

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,139评论 9 118
  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 1,459评论 0 6
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 3,616评论 0 7
  • 既然要撒娇,那就先拿网路上互不相识的陌生人练手,就像谢依霖在《撒娇的女人最好命》里说的那样,真正的高手,都是从远程...
    她生活阅读 714评论 0 5
  • 第五天,下雨,好冷。 今天是考研的第一天,英语感觉还不错,这一年的学习还是有比较明显的进步的,不能放弃,就算考完了...
    艾小tu阅读 168评论 0 0