码迷,mamicode.com
首页 > 编程语言 > 详细

python 基础 学习 3

时间:2015-05-26 16:27:15      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:python

python 学习 函数

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

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

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

    -预定义的python函数(系统自带的一些函数,还有一些第三方编写的函数,如其它程序员编写的一些函数,对于这些现成的函数用户可以直接拿来使用)

      *函数的定义和调用

         def 函数名 (函数列表):

         #可以没有参数

         #函数名的定义和变量的定义是相同的

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

>>> a = 10
>>> b = 20
>>> def add():
...     c=a+b
...     print c
... 
>>> add()
30
>>> 
#实现代码的重复使用
范例:
[root@zabbix tools]# cat 8.py 
#/usr/bin/python
def fun():
    if True:
        print "kong"
[root@zabbix tools]# python 8.py 
#单纯的函数定义,但是没有调用,所以没有任何效果。
[root@zabbix tools]# python 8.py 
a
kong
kong
[root@zabbix tools]# cat   8.py
#/usr/bin/python
def fun():
    if True:
        print "kong"
print "a"
if True:
    fun()
if fun():
    print "ok"
[root@zabbix tools]#

      *函数的参数

 *形式参数和实际参数

        - 在定义函数时函数名后面圆括号中的变量名称叫做”形式参数“,简称:形参;

         - 在调用函数时,函数名后面圆括号中的变量名称叫做“实际参数”,简称:实参

范例:

[root@zabbix tools]# python 8.py 
please input something100
100
[root@zabbix tools]# cat 8.py 
#~/usr/bin/python
def fun(x):
        print x
s = raw_input("please input something")
fun(s)
[root@zabbix tools]# 
#注意数量要保持一致。
[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)http://blog.51cto.com/user_index.php?action=addblog_new&did=137895
#类型错误,fun()函数未传参。
[root@zabbix tools]# cat 8.py 
#~/usr/bin/python
def fun(x):
        print x
s = raw_input("please input something")
fun()
#TypeError: fun() takes exactly 1 argument (2 given) 多传参报错。
多个参数定义范例:

[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]# cat  9.py 
#!/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  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)

在上述的小游戏中,当用户什么都不输入的时候,这时候就需要函数的缺省参数(默认参数)

如下:

[root@zabbix tools]# python 9.py 
正在生成一个 3 元 奶油 口味的冰激凌!
[root@zabbix tools]# cat 9.py 
#!/usr/bin/python
#!coding:utf8
def mashine(x,y="奶油"):
    print "正在生成一个",x,‘元‘,y,"口味的冰激凌!"
mashine(3)
#当然x 也可以有默认值
[root@zabbix tools]# cat 9.py 
#!/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,"巧克力")

小问题:    

    当参数只传一个价格的时候:

[root@zabbix tools]# python 9.py 
正在生成一个 3 元 奶油 口味的冰激凌!
[root@zabbix tools]# cat 9.py 
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
    print "正在生成一个",x,‘元‘,y,"口味的冰激凌!"
mashine(3)

    当传递口味的时候:

[root@zabbix tools]# cat 9.py 
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
    print "正在生成一个",x,‘元‘,y,"口味的冰激凌!"
#x=raw_input("please  something:")
#y=raw_input("please   something:")
mashine(‘巧克力‘)
[root@zabbix tools]# python 9.py 
正在生成一个 巧克力 元 奶油 口味的冰激凌!
#传递形参、实参的时候都可以固定给值。
[root@zabbix tools]# python 9.py 
正在生成一个 10 元 巧克力 口味的冰激凌!
[root@zabbix tools]# cat 9.py 
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y="奶油"):
    print "正在生成一个",x,‘元‘,y,"口味的冰激凌!"
mashine(y=‘巧克力‘)

如果x值有默认参数,y没有,如下:

[root@zabbix tools]# cat 9.py 
#!/usr/bin/python
#!coding:utf8
def mashine(x=10,y):
    print "正在生成一个",x,‘元‘,y,"口味的冰激凌!"
#x=raw_input("please  something:")
#y=raw_input("please   something:")
mashine(‘巧克力‘)
[root@zabbix tools]# python 9.py 
  File "9.py", line 3
    def mashine(x=10,y):
SyntaxError: non-default argument follows default argument
#报语法错误;

总结:当设置默认参数时时自右向左开始的!可以通过调换顺序调整!

[root@zabbix tools]# python 9.py 
正在生成一个 10 元 巧克力 口味的冰激凌!
[root@zabbix tools]# cat 9.py 
#!/usr/bin/python
#!coding:utf8
def mashine(x,y=10):
    print "正在生成一个",y,‘元‘,x,"口味的冰激凌!"
mashine(‘巧克力‘)

      *函数中的变量

*局部变量和全局变量

           - python 中如何变量都有其特定的 作用域

           -在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称为局部变量;

           -在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全部变量;


范例

[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
[root@zabbix tools]# cat  10.py 
#!/usr/bin/python
def fun():
    a=100
    print a
print  a
如果调用函数fun:
[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
[root@zabbix tools]# cat 10.py 
#!/usr/bin/python
def fun():
    a=100
    print a
fun()
print "#"*50
print  a
#表明100是由函数调用显示。

[root@zabbix tools]# python 10.py 
my name is HIBOY
100
my name is HIBOY
[root@zabbix tools]# cat 10.py 
#!/usr/bin/python
x="my name is HIBOY"
#定义全局变量;
#定义函数;
def fun():
    a=100
    print x
    print a
fun()
print x

如果局变量和部变量重名

[root@zabbix tools]# python 10.py 
100
my name is HIBOY
[root@zabbix tools]# cat 10.py 
#!/usr/bin/python
x="my name is HIBOY"
def fun():
    x=100
    print x
fun()
print x    
#注意仅仅是名字相同,含义不相等的。

global 语句 :

      global 变量名

      强制声明为全局变量

[root@zabbix tools]# python 10.py 
100
200
[root@zabbix tools]# vi 10.py 
#!/usr/bin/python
x="my name is HIBOY"
def fun():
    x=100
    global y
    y = 200
    print x
fun()  #注意此处要调用函数
print y
如果没有调用函数,是没有意义的。
[root@zabbix tools]# cat 10.py 
#!/usr/bin/python
x="my name is HIBOY"
def fun():
    x=100
    global y
    y = 200
    print x
print y
[root@zabbix tools]# python 10.py 
Traceback (most recent call last):
  File "10.py", line 8, in <module>
    print y
NameError: global name ‘y‘ is not defined
#y未定义,需调用

案例:

         如果将x同时也声明为全局变量(重名)

[root@zabbix tools]# python 10.py 
my name is HIBOY
100
[root@zabbix tools]# cat 10.py 
#!/usr/bin/python
x="my name is HIBOY"
def fun():
    global x 
    x=100
print x
fun()
print x

总结: 在函数之前全局变量值不变,在函数之后全局变量为函数的中全局变量的值


 

      *函数的返回值

 *函数的返回值

        - 函数被调用后会返回一个指定的值;

         - 函数调用后默认返回None

           -return 返回值

           -返回值可以是任意类型

           -return执行后,函数终止

           -区分返回值和打印


#注意打印和返回的区别

>>> f(0)
0
>>> def f(x,y):
...     print x+y
... 
>>> f(2,3)
5
>>> z = f(5,6)
11    #此处只是打印           
>>> print z
None
>>> sum([1,5,6])
12
>>> z = sum([1,5,6])
>>> print z
12

范例:

>>> 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]

在函数中只要执行到retuen时,都会相应的结束

范例:

>>> 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
#注意返回和打印的区别

     *多类型传值和传值冗余


-向函数传元组和字典

>>> 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作为一个整体,是一个元组类型的数据,当这样传值时候,t的值只能对应到x,y无法接受仍和值;
>>> fun(t,10)
(‘b‘, ‘c‘) 10
#需求:当函数需要使用元组的值时,如何传值到函数?
例:
>>> t = (‘name‘,‘kong‘)
>>> def fun(x,y):
...     print "%s : %s" %(x,y)
... 
# 字符串格式化输出 %s 代表将来传过来一个字符串  % 表示传值
#>>> print "%s %s" %(‘name‘,‘kong‘)
# name kong
>>> fun(*t)     #* 告知t为元组
name : kong
#传值的时候是一一对应的,多个是不可以的
>>> 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):    #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}
>>> 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‘  #x给了过多的值
>>> fun(1,2,3,4,5,6,y=20,arges=30)
1
(2, 3, 4, 5, 6)
{‘y‘: 20, ‘arges‘: 30}






















本文出自 “思想大于技术” 博客,谢绝转载!

python 基础 学习 3

标签:python

原文地址:http://linuxboys.blog.51cto.com/9150052/1655228

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!