函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()等。也可以创建用户自定义函数。那么python如何调用函数呢?一起来了解下吧:
	
	python如何调用函数
	[图片0]
	添加
	
	说明
	
	在想引用的文件所在目录下和想执行的py目录下,新建一个文件: ,即可通过 相对路径的方式引用
	
	方法1
	
	目录如下:
	
	py_test/
	
	├── a
	
	│ ├── 
	
	│ └── 
	
	├── b
	
	│ ├── 
	
	│ └── 
	
	└── 
	
	内容:
	
	# coding:utf8
	
	def a():
	
	  print("I am a")
	
	内容:
	
	# coding:utf8
	
	from ..a import a
	
	()
	
	其他文件为空
	
	和py_test同目录,执行命令:
	
	python -m 
	
	即可调用中的函数
	
	方法2
	
	方法1的缺点是只能在那个路径下执行命令,如果不想使用方法1,就只能把中的代码封装成一个函数,在py_test文件夹下新建,通过来调用中封装的函数,这是比较正式的做法
	
	目录如下:
	
	py_test
	
	├── a
	
	│ ├── 
	
	│ └── 
	
	├── b
	
	│ ├── 
	
	│ └── 
	
	└── 
	
	内容:
	
	# coding:utf8
	
	def a():
	
	  print("I am a")
	
	内容:
	
	# coding:utf8
	
	from  import a
	
	def b():
	
	  print("I am b!")
	
	  a()
	
	内容:
	
	# coding:utf8
	
	from  import b
	
	b()
	
	其他文件为空,举例在py_test下执行命令:
	
	python 
	
	即可正常执行
	
	sys添加路径
	
	说明
	
	将想要用的文件所在目录path添加到系统路径,即可引用
	
	主要形式如下:
	
	import sys
	
	(path)
	
	使用以上形式需要注意使用绝对路径,而且需要注意操作系统导致的路径差异
	
	Python如何自定义函数
	
	函数定义
	
	    函数定义的简单规则:
	
	函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须放在圆括号中间
	
	函数内容以冒号起始,并且缩进
	
	若有返回值,Return[expression] 结束函数;不带return 表达式相当于返回None
	
	    函数通常使用三个单引号 '''...''' 来注释说明函数;函数体内容不可为空,可用 pass 来表示空语句;以下几个为简单的函数示例:
	
	复制代码
	
	1 ''' some basic functions '''
	
	2 def func1():          # 函数无传入参数
	
	3  print("func1")       # 无return值
	
	4 func1()            # 函数调用
	
	5
	
	6 def func2():
	
	7  return("func2")      # return 字符串 "func2"
	
	8 print(func2())
	
	9
	
	10 def func3(a,b):        # 需传两个参数
	
	11  print("a+b = %d" %(a+b))  # print表达式,无return
	
	12 func3(3,4)
	
	13
	
	14 def func4(a,b):        # 需传两个参数
	
	15  return (a+b)        # return a+b 的值
	
	16 print(func4(4,3))
	
	复制代码
	
	  函数调用
	
	    定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
	
	    这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
	
	    上面的例子中 func1() 就是无参数函数的调用; func3(3,4) 为有参数函数的调用
	
	  深入函数定义
	
	    默认参数值
	
	      最常用的一种形式是为一个或过个参数指定默认值。调用时,可不传入有默认值的参数。参考下例:
	
	复制代码
	
	1 ''' advanced: 简单询问框 '''
	
	2 def ask_ok(hint, retries=4, complaint='Yes or no, please!'):  # 仅有hint是必须要传入的,retries 和 complaint 均有默认值
	
	3  while True:
	
	4    u = input(hint)
	
	5    if u in ('y','ye','yes'):      # in 的用法;若用户回答在('y','ye','yes') return True
	
	6      return True
	
	7    if u in ('n','no','nop','nope'):   # 若用户回答在('n','no','nop','nope') return False
	
	8      return False
	
	9    retries = retries -1         # 若用户输入不在之前所列,可重试,重试次数-1
	
	10    if retries <= 0 :          # 若超出重试次数,raise自定义Error
	
	11      raise IOError('refusenik user')
	
	12    print(complaint)           # 若用户输入不在之前所列,提示 complaint 信息
	
	13
	
	14 result1 = ask_ok("Yes or No?")        # 只给必要的参数值hint,可尝试输入'y' 'no' 等;输入其他的如 'x' 超过4次
	
	15 print(result1)                # 查看return的值
	
	16
	
	17 # result2 = ask_ok("Yes or No?",2)      # 给出retries=2,尝试输入其他的如 'x' 超过2次   
	
	18
	
	19 # result3 = ask_ok("Yes or No?",'Y or N?')  # 不可只省略第二个参数,若尝试输入其他的如 'x',会报错
	
	20
	
	21 # result4 = ask_ok("Yes or No?",3,'Y or N?') # 给出所有的参数,可尝试输入'y' 'no' 等;输入其他的如 'x' 超过3次
	
	22 # print(result4)
	
[图片1]
	复制代码
	
	       注意:默认值是在函数定义作用域被解析的,如下所示
	
	复制代码
	
	1 '''默认值是在函数定义作用域被解析的'''
	
	2 i = 5
	
	3 def print_i(var=i):
	
	4  print(var)
	
	5 i = 6
	
	6 print_i()    # 输出为5
	
	复制代码
	
	      重要警告:默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,如列表、字典或大多数类的实例。如下例,函数在后续调用过程中会累积之前传给它的参数。
	
	复制代码
	
	1 ''' 默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,如列表、字典或大多数类的实例。
	
	2  函数在后续调用过程中会累积之前传给它的参数。
	
	3 '''
	
	4 def append_L(a,L=[]):    # 必须传参a,L不必须,为list,默认为空
	
	5  (a)
	
	6  return L
	
	7 print(append_L(1))      # 给出参数 a=1, 此时 L 已变为 [1]
	
	8 print(append_L(2))      # 输出 [1,2]
	
	9 print(append_L(3))      # 输出 [1,2,3]
	
	10
	
	11 ''' L缺省时,做改变L,而不是累积值,可像下方这样定义函数 '''
	
	12 def change_L(a,L=None):
	
	13  if L is None:
	
	14    L = []
	
	15  (a)
	
	16  return L
	
	17 print(change_L(1))      # 给出参数 a=1, L为None
	
	18 print(change_L(2))      # 给出参数 a=2, L为None  输出 [2]
	
	19 print(change_L(3,[0]))    # 给出参数 a=1, L=[0]  输出 [0,3]
	
	复制代码
	
	    关键字参数
	
	      上面的例子中,调用函数给出的参数都是根据定义的顺序来的。函数还可以根据 关键字函数 的形式来调用,参见下面的示例:
	
	1 def add(a,b):         
	
	2  return (a+b)       
	
	3 print(add(b=9,a=2))        # 关键字参数定义 b=9 , a=2 与传参顺序无关
	
	4 # print(add(b=9,2))        # 会报错
	
	    可变参数列表
	
	      可以让函数调用可变个数的参数(不常用),这些参数被包装进一个元组。在这些可变个数的参数之前,可以有零到多个普通的参数。
	
	      可变参数的表示为在其参数名前加*,如*args;参见下面的示例:
	
	复制代码
	
	1 def join_bysep(*strs,sep):    # strs 可为多个参数
	
	2  return (strs)    # 字符串连接函数 (str)
	
	3 print(join_bysep("red","blue","green",sep=" "))
	
	4 print(join_bysep("red","blue",sep=","))
	
	5 print(join_bysep("red",sep=","))
	
	6 print(join_bysep(sep=","))    # 无strs传参,为一空的字符串
	
	Python如何调用自定义函数
	
	python的引外机制:
	
	import abc
	
	1、首先在当前目录下找有没有abc、
	
	2、找python的安装目录:F:-packages;F:;
	
	3、找电脑中path下面的目录
	
	于是我改变路径,将保存的文件直接放在python的安装目录下,使用import abc命令,然后在Python交互界面用 (XXX是文件中的定义函数的函数名),解决了调用自定义函数问题。
	
	python调用函数的方法
	
	要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。
	
	也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。
	
	调用abs函数:
	
	>>> abs(100)
	
	100
	
	>>> abs(-20)
	
	20
	
	>>> abs()
	
	
	
	调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个:
	
	>>> abs(1, 2)
	
	Traceback (most recent call last):
	
	 File "<stdin>", line 1, in <module>
	
	TypeError: abs() takes exactly one argument (2 given)
	
	如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型:
	
	>>> abs('a')
	
	Traceback (most recent call last):
	
	 File "<stdin>", line 1, in <module>
	
	TypeError: bad operand type for abs(): 'str'
	
	而max函数max()可以接收任意多个参数,并返回最大的那个:
	
	>>> max(1, 2)
	
	2
	
	>>> max(2, 3, 1, -5)
	
	3
	
	数据类型转换
	
	Python内置的常用函数还包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数:
	
	>>> int('123')
	
	123
	
	>>> int()
	
	12
	
	>>> float('')
	
	
	
	>>> str()
	
	''
	
	>>> str(100)
	
	'100'
	
	>>> bool(1)
	
	True
	
	>>> bool('')
	
	False
	
	函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
	
	>>> a = abs # 变量a指向abs函数
	
	>>> a(-1) # 所以也可以通过a调用abs函数