python中def fun(a、b=200)_python 基础 函数

函数

什么是函数函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。

可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要再所有地方重复编写这些语句。

函数的分类-自定义函数(用户自己编写)

-预定义的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 

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:utf8def mashine(x=10,y="奶油"):    print "正在生成一个",x,'元',y,"口味的冰激凌!"mashine(3)[root@zabbix tools]# python 9.py 正在生成一个 3 元 奶油 口味的冰激凌!

当传递口味的时候:#!/usr/bin/python#!coding:utf8def mashine(x=10,y="奶油"):    print "正在生成一个",x,'元',y,"口味的冰激凌!"mashine('巧克力')[root@zabbix tools]# python 9.py 正在生成一个 巧克力 元 奶油 口味的冰激凌!#!/usr/bin/python#!coding:utf8def 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 

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 

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

...         return -1

...     print "hello word!"

...

>>> f(5,6)

-1

>>> f(7,6)

hello word!

>>> z = f(7,6)

hello word!

>>> print z

None

多类型传值和传值冗余

-向函数传元组和序列

*表示传值元组和序列

>>> 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 "", line 1, in 

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 "", line 1, in 

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 "", line 1, in 

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 "", line 1, in 

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 "", line 1, in 

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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值