Python中的函数

函数
1.函数是组织好的,可重复使用的,用来实现单一,或相关联动功能的代码段



2.语法:

def 函数名(参数列表):
    函数体
    reture xxx
def fn1(a,b):
    sum=a+b;
    print(sum);
fn1(1,2);
>>> 3
def fn1(a,b):
    print("函数内部:",a+b);
    return a+b;
num=fn1(1,2);
print(num); (return返回值打印的num);
>>> 函数内部:3

3.
def fun(nums):
    nums[0]="张飞";
    nums[1]="刘备";
nums=["李逵","松江"];
print("调用前:",nums)
>>>  ['李逵', '松江']
fun(nums)
print("调用后:",nums)
>>>  ['张飞', '刘备']

4.以下是调用函数时可使用的正式参数类型;

  必选参数
 形参和实参一一对应(个数,数据类型,顺序)
 形参:定义方法时的参数
 实参:调用方法时的参数


      (以实参为准,若没实参有形参,则结果为形参为准)
def fun1(a=3,b=2):
    '''
    :param a 第一个加数:
    :param b:第二个加数
    :return: a+b的和
    '''
    return  a+b;
h=fn1(4,4);
print(h);
>>>  8

 默认参数:
 (缺省参数)缺省参数必须写在后面,可以不指定参数名,但是顺序要保证,否则要指定参数名

def printinfo( name, age = 35 ):
 print ("名字: ", name);
 print ("年龄: ", age);
 return;
printinfo('ok');
>>>  名字:  ok
     年龄:  35

  不定长参数(可变参数):

 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple(用*标书);


def GetSum(*nums):
    sum=0;
    for i in nums:
        sum+=i;
    return sum;

s=[2,3,4,5];
t=(2,3,4,5,6,7,8)
print(GetSum())
print(GetSum(*s))
print(GetSum(*t))
>>>  0
     14
     35

  命名关键字参数

 1.一旦以name=value的传参数的形式存在  以后都要以这种形式存在

 2.name=value的传参数的形式 不要求顺序

def show(name,age,sorce=90):
    print('姓名:{} 年龄:{}成绩:{}'.format(name,age,sorce))

show('OK',30)
show(age=30,name='OK')
show(sorce=80,age=30,name='OK')
show('OK',name='ok',age=30)
>>>  姓名:OK 年龄:30成绩:90
     姓名:OK 年龄:30成绩:90
     姓名:OK 年龄:30成绩:80
     抛异常

  关键字参数

 关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict;

 关键字参数:**kw

**kw拷贝原内容,改动不会影响到函数外的extra;


def student(name,age,**kw):                                                                              
    kw.clear()
    print('姓名{} ,年龄{} other:{}'.format(name,age,kw))

#值传递
def fun3(kw):
    kw.clear();
student('tom',30,hao='篮球',ai='足球');
dic={'一':123,'二':223,'三':333}
student('ok',30,**dic)
print(dic)
dic2={'一':123,'二':223,'三':333}
fun3(dic2)
print(dic2)
>>>   姓名tom ,年龄30 other:{}
      姓名ok ,年龄30 other:{}
      {'一': 123, '二': 223, '三': 333}
      {}

 参数组合

                                                                                              def f1(a,b,c=0,*args,**kw):
                                                           print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)
args=(1,2,3,4)
f1(args);
>>>  a = 1 b = 2 c = 3 args = (4,) kw = {}
                                                                                                 
 
 
 
 

                                                                                                           def f1(a, b, c=0, *args, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
>>> a = A b = B c = 0 args = () kw = {'d': 99, 'x': '#'}

                                                                                                   def f1(a, b, c=0, *args, **kw):
  print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args,**kw)
>>>   a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}



函数的作用域


原因就是: 位置不同-->作用域不同,全局变量与局部变量的作用域不同 生命周期不同;


g_a=10;#全局变量
def changeNum(g_a):
    # g_a=5;#局部变量
    print("函数内部:",(g_a+10))
#
# print("调用前:",g_a)
# changeNum(1)
# print("调用后:",g_a)
>>> 调用前:10
    函数内部: 11
    调用后: 10

#当全局变量和局部变量同名时,局部变量优先 -->就近一致原则

5.匿名函数:

     python 使用 lambda 来创建匿名函数;

 (函数体内调用函数也叫高阶函数)

sum=lambda a,b:a*b;
s=sum(2,3);
print(s);
>>>  6
def dfdsfe(a,b):
    return a+b;
def add(a,b,fun):
    print(fun(a,b));
add(11,22,dfdsfe)
>>>  33

6.filter()过滤函数:

接收一个函数一个序列,将序列中的元素应用到函数内,返回值为真则保留,为假则丢弃。

当我在执行filter函数的时候,一直报<filter object at 0x03000750>。我的环境是Python3.6

应该讲filter函数转换成list;

def chint (x):
        return isinstance (x ,int)
lis = [1,2,'yao',3,'yi']
a = filter (chint , lis)
print(list(a))
>>>  [1,2,3]

7. map()函数将序列的每个元素传入函数中执行,并把结果作为新的list返回。

foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
print(list( map(lambda x:x%2,foo)))
>>> [0, 0, 1, 0, 1, 0, 0, 0, 1]

8. python reduce():每次迭代,将上一次的迭代结果与下一个元素一同执行一个二元的func函数;

    需导入模块 import fucntools,reduce在Python3.6中需要导入模块

n = 5
print reduce(lambda x, y: x * y, range(1, n + 1))
>>>  120

9.sort()和sorted的区别;

sort()函数改变的是原列表的排序,sorted()函数相当于复制原列表后,重新排序;


在sorted中,reverse=True表示降序排列 reverse=False 升序排列;

li=[25,2,99,45,87,5,1,5,8,45,26];
ol=li.sort();
ul=sorted(li)
print(ul)
print(ol)
>>>  [1, 2, 5, 5, 8, 25, 26, 45, 45, 87, 99]
     None
li=[25,2,99,45,87,5,1,5,8,45,26];
li.sort();
ul=sorted(li,reverse=True)
print(ul)
print(li)
>>>   [99, 87, 45, 45, 26, 25, 8, 5, 5, 2, 1]
      [1, 2, 5, 5, 8, 25, 26, 45, 45, 87, 99]
li=[("tom",82),("jack",66),("marry",90),("rose",70)];
li.sort();
ul=sorted(li,key=lambda s:s[1],reverse=True)
print(ul)
print(li)
>>>  [('marry', 90), ('tom', 82), ('rose', 70), ('jack', 66)]
     [('jack', 66), ('marry', 90), ('rose', 70), ('tom', 82)]








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值