Python基础6

函数关键字

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

函数的定义

我们以自定义一个求绝对值的my_abs函数为例:

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):
    函数体

函数参数与作用域

以下是调用函数时可使用的正式参数类型:
必备参数
关键字参数
默认参数
不定长参数

  1. 位置传递实例:
    def fun(a,b,c)
      return a+b+c
    print(f(1,2,3))
  1. 关键字传递

关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。

def fun(a,b,c)
  return a+b+c
print(f(1,c=3,b=2))
  1. 参数默认值

在定义函数的时候,使用形如c=10的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。

def f(a,b,c=10):
  return a+b+c

print(f(3,2))
print(f(3,2,1)) 

在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.第二次调用函数的时候,c被赋值为1,不再使用默认值。

  1. 包裹传递

在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。

下面是包裹位置传递的例子:

 def func(*name):
  print type(name)
  print name
 

func(1,4,6)
func(5,6,7,1,2,3)

两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。

为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。

下面是包裹关键字传递的例子:

def func(**dict):
  print type(dict)
  print dict
 

  func((1,9))
  func("a":2,"b":1,"c":11) 

与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。

包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。

  1. 解包裹

*,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:

def func(a,b,c):
  print a,b,c
 

args = (1,3,4)
func(*args)

dict = {'a':1,'b':2,'c':3}
func(**dict)

在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

x = int(2.9)  # 内建作用域
 
g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问

函数返回值

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print ("函数内 : ", total)
   return total

习题

  1. 实现random.sample方法

dlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
slice = random.sample(dlist, 5)  # 从list中随机获取5个元素,作为一个片断返回
print (slice)
print (dlist)  # 原有序列并没有改变

[7, 5, 6, 9, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
import random
def get_random_sample(data_list, k):
    temp = []
    while True:
        x = random.randint(0,len(data_list))
        temp.append(data_list[x-1])
        if len(set(temp)) >= k:
            break
    return list(set(temp))

print(get_random_sample(dlist, 5))


  1. 实现Max方法

dlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print (max(dlist))

10
def get_max(x):
    "查找参数x的最大值"
    Len = len(x)
    max_value = x[0]
    for i in range(1,Len):
        if x[i]>= max_value:
            max_value = x[i]
    return max_value


  1. 实现判断两个字符串是否相等的方法
1、比较字符串是否相同:

==:使用==来比较两个字符串内的value值是否相同

is:比较两个字符串的id值。

2、字符串的长度比较

len():显示字符串的长度,返回数字整型。可以进行长度的比较。

3、使用比较运算符

><> =< =、比较的规则为:从第一个字符开始比较,排序在前边的字母为小,当一个字符串全部字符和另一个字符串的前部分字符相同时,长度长的字符串为大。

a = '256'
b = '256'
print(id(a))
print(id(b))
print(a == b)

2206964433168
2206964433168
True
def compare_equal(a, b):
    if not len(a) == len(b):
        return False
    for i in range(len(a)):
        if not a[i] == b[i]:
            return False
    return True

参考文献

https://www.cnblogs.com/nkwy2012/p/6023719.html
https://www.cnblogs.com/python-dd/p/9368078.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值