zoukankan      html  css  js  c++  java
  • 与孩子一起学编程13章

    这一章,学习函数

    定义函数关键字 def,代码

    >>> def printMyAddress():
    	print "Warren Sande"
    	print "123 Main Street"
    	print "Ottawa, Ontario, Canada"
    	print "K2M 2E9"
    	print
    

    调用函数

    >>> printMyAddress()
    Warren Sande
    123 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    >>>

    嗯,就是这样,很简单。使用函数的主要原因,就是可以通过调用反复的使用,比如下面要求把上面的地址打印5次,如果没有函数就会很麻烦。

    如果用循环呢,是不是也可以完成上面的任务,是的,可以。不过如果这儿调用一次,可以用循环,如果在不同的代码片段,反复调用呢,循环就做不到这么方便了。

    调用函数后面的括号,可以用来传递参数(argument)。

    def printMyAddress(myName):
        print myName
        print "123 Main Street"
        print "Ottawa, Ontario, Canada"
        print "K2M 2E9"
        print
    
    printMyAddress("Carter Sande")

    运行结果

    >>> ================================ RESTART ================================
    >>> 
    Carter Sande
    123 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    >>> 

    这看上去和第一个没多大区别,不过如我们这样呢

    def printMyAddress(myName):
        print myName
        print "123 Main Street"
        print "Ottawa, Ontario, Canada"
        print "K2M 2E9"
        print
    
    printMyAddress("Carter Sande")
    printMyAddress("Warren Sande")
    printMyAddress("Kyra Sande")
    printMyAddress("Patricia Sande")

    运行试试看

    >>> ================================ RESTART ================================
    >>> 
    Carter Sande
    123 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    Warren Sande
    123 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    Kyra Sande
    123 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    Patricia Sande
    123 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    >>> 

    有多个参数的函数

    def printMyAddress(someName, houseNum):
        print someName
        print houseNum,
        print "Main Street"
        print "Ottawa, Ontario, Canada"
        print "K2M 2E9"
        print
    
    printMyAddress("Carter Sande", "45")
    printMyAddress("Warren Sande", "64")
    printMyAddress("Kyra Sande", "22")
    printMyAddress("Patricia Sande", "36")

    运行结果

    >>> ================================ RESTART ================================
    >>> 
    Carter Sande
    45 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    Warren Sande
    64 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    Kyra Sande
    22 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    Patricia Sande
    36 Main Street
    Ottawa, Ontario, Canada
    K2M 2E9
    
    >>> 

    除了可以向函数传递参数,函数还可以有返回值,在函数用关键字return

    >>> def calculateTax(price, tax_rate):
    	taxTotal = price + (price * tax_rate)
    	return taxTotal
    

    这样,以后调用

    >>> totalPrice = calculateTax(7.99, 0.06)

    函数把返回值赋值给totalPrice,以后可以打印或调用

    >>> print totalPrice
    8.4694
    >>> 

    也可以这样

    >>> print calculateTax(7.99, 0.06)
    8.4694

    下面用一个有返回值的函数建立程序

    def calculateTax(price, tax_rate):
        total = price + (price * tax_rate)
        return total
    
    my_price = float(raw_input ("Enter a price: "))
    
    totalPrice = calculateTax(my_price, 0.06)
    print "price = ", my_price, " Total price = ", totalPrice

    运行结果,先询问输入price

    >>> 
    Enter a price: 

    给出一个数字后,就是

    >>> 
    Enter a price: 13.56
    price =  13.56  Total price =  14.3736
    >>> 

    注意:程序中使用(或可以使用)变量的部分称为这个变量的作用域(scope)。


    局部变量,全局变量,在合法的作用域中使用变量

    def calculateTax(price, tax_rate):
        total = price + (price * tax_rate)
        print my_price
        return total
    
    my_price = float(raw_input ("Enter a price: "))
    
    totalPrice = calculateTax(my_price, 0.06)
    print "price = ", my_price, " Total price = ", totalPrice

    这段代码里,函数里有一个调用全局变量的句子,注意这样可以吗,试试看,为什么

    >>> 
    Enter a price: 5.56
    5.56
    price =  5.56  Total price =  5.8936
    >>> 

    python允许你使用这个变量,但不要试图改变它

    下面,试试这段在函数里修改一个全局变量的代码

    def calculateTax(price, tax_rate):
        total = price + (price * tax_rate)
        my_price = 10000
        print "my_price (inside function) = ", my_price
        return total
    
    my_price = float(raw_input ("Enter a price: "))
    
    totalPrice = calculateTax(my_price, 0.06)
    print "price = ", my_price, " Total price = ", totalPrice
    print "my_price (outside function) = ", my_price
    

    运行以后,这样

    >>> ================================ RESTART ================================
    >>> 
    Enter a price: 12.56
    my_price (inside function) =  10000
    price =  12.56  Total price =  13.3136
    my_price (outside function) =  12.56
    >>> 

    函数内外定义的变量值是否不同,知道为什么吗

    强制为全局变量,关键字global。上面的代码,可以这样修改

    def calculateTax(price, tax_rate):
        total = price + (price * tax_rate)
        global my_price

    总结,变量命名,强烈建议不要重复使用变量名,使用不同的变量命名,可以避免混乱以及好多麻烦。




  • 相关阅读:
    Mybatis中的设计模式
    Mybatis的#{}和${}的区别是什么?
    ES的写入速度优化
    康师傅JVM:垃圾回收相关概念(十六)
    i++为什么不是原子操作?
    Zookeeper的watch机制
    LeetCode 1.两数之和
    ESP 8266 引脚图
    Arduino 将 String 转化为 int
    微擎修改 icon.jpg 后项目主页未变
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3329037.html
Copyright © 2011-2022 走看看