您的位置:首页 > 编程语言 > Python开发

python 基础 函数

2015-05-26 13:39 183 查看
函数
什么是函数
函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。
可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要再所有地方重复编写这些语句。
函数的分类
-自定义函数(用户自己编写)
-预定义的python函数(系统自带的一些函数,还有一些第三方编写的函数,如其它程序员编写的一些函数,对于这些现成的函数用户可以直接拿来使用)
函数的定义: def 函数名 (函数列表)
#可以没有参数 #函数名的定义和变量的定义是相同的

注意:
函数名是两个以上单词时,第二个单词的首字母需要大写

>>> a = 10
>>> b = 20
>>> def add():
...     c=a+b
...     print c
...
>>> add()
30
函数的调用
#/usr/bin/python
def fun():
if True:
print "kong"
print "a"
if True:
fun()
if fun():
print "ok"
[root@zabbix tools]# python 8.py
a
kong
kong
函数的参数
*形式参数:- 在定义函数时函数名后面圆括号中的变量名称叫做”形式参数“,简称:形参;

#~/usr/bin/python
def fun(x):                   #x形参
print x
s = raw_input("please input something")
fun(s)
[root@zabbix tools]# python 8.py
please input something100     #100实参
100
错误传参
[root@zabbix tools]# python 8.py
please input somethingd
Traceback (most recent call last):
File "8.py", line 5, in <module>
fun()
TypeError: fun() takes exactly 1 argument (0 given)
#类型错误,fun()函数未传参。
#TypeError: fun() takes exactly 1 argument (2 given)
多个参数定义:
#!/usr/bin/python
def fun(a,b):
if a == b :
print "ok"
else:
print x, '!=' ,y
x=raw_input("please  number something:")
y=raw_input("please  number something:")
fun(x,y)
[root@zabbix tools]# python 9.py
please  number something:2
please  number something:2
ok
[root@zabbix tools]# python 9.py
please  number something:3
please  number something:5
3 != 5
*实际参数: - 在调用函数时,函数名后面圆括号中的变量名称叫做“实际参数”,简称:实参;
小游戏:
[root@zabbix tools]# python 9.py
please  something:10
please   something:巧克力
正在生成一个 10 元 巧克力 口味的冰激凌!
[root@zabbix tools]# cat 9.py
#!/usr/bin/python
#!coding:utf8
def mashine(x,y):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
x=raw_input("please  something:")
y=raw_input("please  something:")
mashine(x,y)
#在上述的小游戏中,当用户什么都不输入的时候,这时候就需要函数的缺省参数(默认参数)
缺省参数
总结:当设置默认参数时是自右向左开始的!可以通过调换顺序调整!
#!/usr/bin/python
#!coding:utf8
def mashine(x,y="奶油"):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine(3)
[root@zabbix tools]# python 9.py
正在生成一个 3 元 奶油 口味的冰激凌!

当然x 也可以有默认值
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine()
[root@zabbix tools]# python 9.py
正在生成一个 10 元 奶油 口味的冰激凌!

当传值得时候,会使用所传的参数
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine(3,"巧克力")
小问题: 当参数只传一个价格的时候:
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine(3)
[root@zabbix tools]# python 9.py
正在生成一个 3 元 奶油 口味的冰激凌!
当传递口味的时候:
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine('巧克力')
[root@zabbix tools]# python 9.py
正在生成一个 巧克力 元 奶油 口味的冰激凌!
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine(y='巧克力')
[root@zabbix tools]# python 9.py
正在生成一个 10 元 巧克力 口味的冰激凌!
#传递形参、实参的时候都可以固定给值。
如果x值有默认参数,y没有,如下:
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y):
print "正在生成一个",x,'元',y,"口味的冰激凌!"
mashine('巧克力')
[root@zabbix tools]# python 9.py
File "9.py", line 3
def mashine(x=10,y):
SyntaxError: non-default argument follows default argument
#报语法错误;
总结:当设置默认参数时是自右向左开始的!可以通过调换顺序调整!
#!/usr/bin/python
#!coding:utf8
def mashine(x,y=10):
print "正在生成一个",y,'元',x,"口味的冰激凌!"
mashine('巧克力')
[root@zabbix tools]# python 9.py
正在生成一个 10 元 巧克力 口味的冰激凌!
函数中的变量

#python 中定义的变量都有其特定的作用域
*局部变量 : -在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称为局部变量;

例证:
#!/usr/bin/python
def fun():
a=100
print a
print  a
[root@zabbix tools]# python 10.py
Traceback (most recent call last):
File "10.py", line 5, in <module>
print  a
NameError: name 'a' is not defined
调用函数:

#!/usr/bin/python
def fun():
a=100
print a
fun()
print "#"*50
print  a
[root@zabbix tools]# python 10.py
100
##################################################
Traceback (most recent call last):
File "10.py", line 7, in <module>
print  a
NameError: name 'a' is not defined
#表明100是由函数调用显示。
*全局变量;: --在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量;
局变量和部变量重名
#!/usr/bin/python
a=10
def fun():
a=100
x=1
print x
print a
fun()
print a
[root@zabbix 123]# python c.py
1
100
10
注意变量和函数的位置关系
#!/usr/bin/python
a=10
def fun():
a=100
x=1
print x
print a
print a
fun()
[root@zabbix 123]# python c.py
10
1
100
global 语句

global 变量名

强制声明为全局变量
范例:
#!/usr/bin/python
x="my name is HIBOY"
def fun():
x=100
global y
y = 200
print x
fun()
print y
#!/usr/bin/python
a=10
def fun():
global  a
a = 100
print a
print a
fun()
print a
[root@zabbix 123]# python c.py
10
100
100
总结: 在函数之前全局变量值不变,在函数之后全局变量为函数的中全局变量的值
函数的返回值
函数被调用后会返回一个指定的值
函数调用后默认返回None
>>> def f(x,y):
...     print x+y
...
>>> f(2,3)
5
>>> z = f(5,6)
11                     #此处只是打印
>>> print z
None
return 返回值
>>> def fun(x,y):
...    print "hello!!!"
...    return x+y
...
>>> fun(5,7)
hello!!!
12
>>> z = fun(5,7)
hello!!!
>>> print z
12
返回值可以是任意类型
>>> def fun():
...     return  range(10)
...
>>> a = fun()
>>> print a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
return执行后,函数终止
>>> def fun():
...     print "hello"
...     print "word"
...
>>> fun()
hello
word
>>> def fun():
...     return "hello"
...     return "word"
...
>>> fun()
'hello'
区分返回值和打印
>>> def f(x,y):
...     if x<y:
...         return -1
...     print "hello word!"
...
>>> f(5,6)
-1
>>> f(7,6)
hello word!
>>> z = f(7,6)
hello word!
>>> print z
None
[b] 多类型传值和传值冗余[/b]
-向函数传元组和序列

*表示传值元组和序列

>>> t = ('name','kong')
>>> def fun(x,y):
...     print "%s : %s" %(x,y)
...
>>> fun(*t)
name : kong
>>> print "%s %s" %('name','kong')
name kong


>>> def fun(x,y):
...     print x,y
...
>>> fun('a',1)
a 1
>>> t=('b','c')
>>> fun(t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() takes exactly 2 arguments (1 given)
#t是一个元组类型数据的整体,传值时值只能对应到x,y无法接受任何值
>>> fun(t,10)
('b', 'c') 10
#传值要一一对应
>>> f =('kong','123','xlo')
>>> fun(*f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() takes exactly 2 arguments (3 given)
-向函数传值字典

**表示传值字典

>>> def fun(name="name",age="0"):
...    print "name:%s" % name
...    print "age:%s" % age
...
>>> fun("kong",30)
name:kong
age:30
>>> fun("kong")
name:kong
age:0
字典传值
>>> d = {'age':30,'name':'mail'}
>>> fun(age=30,name='mail')
name:mail
age:30
>>> fun(**d)
name:mail
age:30
>>> d['age']=31
>>> fun(**d)
name:mail
age:31

>>> c={'a':1,'b':2}
>>> fun(**c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() got an unexpected keyword argument 'a'
多类型的传递方式
>>> fun(c['a'],c['b'])
name:1
age:2
处理多余的实参
>>> def f(x,*all):
...    print x
...    print all
...
:
>>> f(1)
1
()
>>> f(1,2,3)
1
(2, 3)
传递默认参数
>>> f(x=4,y=10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got an unexpected keyword argument 'y'
#10不是单纯传值
多类型传参
>>> def fun(x,*all,**arges):
...    print x
...    print all
...    print arges
...
**变量名定义字典
>>> fun(1)
1
()
{}
>>> fun(1,2,3,4,5,6)
1
(2, 3, 4, 5, 6)
{}
#多余的没有映射关系,所以放到元组里;
>>> fun(1,2,3,4,5,6,arges=-2)
1
(2, 3, 4, 5, 6)
{'arges': -2}
(x给了过多的值)
>>> fun(1,2,3,4,5,6,x=10,y=20,arges=30)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() got multiple values for keyword argument 'x'
>>> fun(1,2,3,4,5,6,y=20,arges=30)
1
(2, 3, 4, 5, 6)
{'y': 20, 'arges': 30}


本文出自 “思想大于技术” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: