• Python学习札记(十一) Function2 函数定义


    参考:定义函数

    Note:

    先看一段代码实例(Barefoot topo.py):

    def read_topo():
        nb_hosts = 0
        nb_switches = 0
        links = []
        with open("topo.txt", "r") as f:
            line = f.readline()[:-1]
            w, nb_switches = line.split()
            assert(w == "switches")
            line = f.readline()[:-1]
            w, nb_hosts = line.split()
            assert(w == "hosts")
            for line in f:
                if not f: break
                a, b = line.split()
                links.append( (a, b) )
        return int(nb_hosts), int(nb_switches), links
    

    函数功能是,打开topo.txt文件,根据文件内容确定host、switch、link数目,并返回。

    函数调用处:

    nb_hosts, nb_switches, links = read_topo()
    

    1.Python中函数定义:def function_name() :

    2.函数内部通过条件判断和循环可以实现非常复杂的逻辑。当遇到return语句,函数结束并返回参数。

    3.可以通过from [name] import [function_name]导入函数,注意导入的文件后缀不加.py。

    eg.

    sh-3.2# more function1.py 
    #!/usr/bin/env python3
    
    def my_function(x) :
            if str(x) == 'Chen' :
                    b = 'Good'
            elif str(x) == 'Li' :
                    b = 'Better'
            else :
                    b = 'Best'
    
            print(b)
    
            return b
    
    sh-3.2# python3
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25) 
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from function1 import my_function
    >>> my_function('Chen')
    Good
    'Good'
    >>> 
    
    

    4.如果在一个判断语句中什么都不想做,则可以使用pass语句。

    eg.

    if age >= 18 :
        pass
    

    5.参数检查。

    如果传入的参数类型不对,Python解释器无法帮助我们解释。这个时候可以在函数中通过定义raise语句抛出错误,如:

    eg.

    def my_function(age, x) :
    
    	if age < 0:
    		raise RuntimeError('age < 0')
    	else :
    		pass
    
    	if str(x) == 'Chen' :
    		b = 'Good'
    	elif str(x) == 'Li' :
    		b = 'Better'
    	else :
    		b = 'Best'
    
    	print(b)
    
    	return b
    
    >>> from function1 import my_function
    >>> my_function(-1, 'Chen')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Users/wasdns/Desktop/PythonLearn/function1.py", line 6, in my_function
        raise RuntimeError('age < 0')
    RuntimeError: age < 0
    >>> 
    

    也可以通过方法 isinstance() 进行参数类型检查:

    def my_function(age, x) :
    
    	if age < 0:
    		raise RuntimeError('age < 0')
    	else :
    		pass
    
    	if not isinstance(x, (str)) :
    		raise TypeError('bad operand type') 
    	else :
    		pass
    
    >>> from function1 import my_function
    >>> my_function(1, 100)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Users/wasdns/Desktop/PythonLearn/function1.py", line 11, in my_function
        raise TypeError('bad operand type') 
    TypeError: bad operand type
    >>> 
    

    6.函数返回多个值。Python的函数允许返回多个值,其本质是返回一个tuple。

    在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

    练习:

    请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:

    ax2 + bx + c = 0

    的两个解.

    不考虑复数:

    #!/usr/bin/env python3
    
    import math
    
    def quadratic(a, b, c) :
    
    	q = b*b - 4*a*c
    
    	if q > 0 :
    		x1 = -b + math.sqrt(q)
    		x2 = -b - math.sqrt(q)
    		return x1/(2*a), x2/(2*a)
    	else :
    		print('No solutions')
    
    

    2017/1/28

  • 相关阅读:
    SQLServer 错误: 15404,维护计划无法执行
    Axis2 服务器端抛出ServiceClass object does not implement问题解决方法
    领域驱动设计 软件核心复杂性应对之道 读书笔记
    华为实施微服务架构的五大军规
    DDD领域驱动设计基本理论知识总结
    TransactionScope使用说明
    错误:该行已经属于另一个表
    SQL基础之 时间戳
    采用左右值编码来存储无限分级树形结构的数据库表设计
    违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
  • 原文地址:https://www.cnblogs.com/qq952693358/p/6357390.html
Copyright © 2020-2023  润新知