আর্কাইভ | python RSS for this section

Python *args and **kwargs demystified

*args and **kwargs demystified

Having hard time understanding the *args and **kwargs magic variables in python? well, this article will just try to ease this a bit. In Fact, the concept is very simple though they look fearsome due to look alikeness with C/C++ pointer thingies. *args and **kwargs are mostly used in function definitions. *args and **kwargs allow you to pass a variable number of arguments to a function. Variable number means you don’t know the quantity in advance. Lets see an example of *args:

def foo(arg, *args):
    print "first variable:{}".format(arg)
    count = 2 
    for item in args:
        print "variable no:{} => {}".format(count,item)
        count += 1


foo('python','is','better','than','java')

joy [chef_painting] $ python args.py 
first variable:python
variable no:2 => is
variable no:3 => better
variable no:4 => than
variable no:5 => java

With **kwargs, we can actually send key, value pairs to python function.

def foo(**kwargs):
    count = 1
    if kwargs is not None:
        for k, v in kwargs.iteritems():
            print "#{} key:{} =>value:{}".format(count,k,v)
            count +=1


foo(lang='python',version='2.7',author='joy')

joy [chef_painting] $ python kwargs.py 
#1 key:lang => value:python
#2 key:version => value:2.7
#3 key:author => value:joy

Linux Perf Tools

Linux Performance Observability

I couldn’t resist myself to share this amazing diagram – with due credit to The Linux Foundations. As you can see from the figure, it is pointing to all the tools/commands that you can use to find the performance related statistics from each component of the whole stack.

Alt

Python Lambda

পাইথন ল্যাম্বডা এক্সপ্রেশন  অনেক জায়গায় ব্যবহার হতে দেখা যায়। যদিও প্রথম দেখায় বিদঘুটে মনেহয়, আদতে সেরকম কঠিন কিছুনা । পাইথন ল্যাম্বডা মূলত দ্রত সরল ১ লাইনের ফাংশন (যেটার বারংবার কল হওয়ার সম্ভাবনা কম) তৈরিতে কাজে লাগানো হয়। আমরা ছোটখাটো একটা সহজ উদাহরণ দিয়ে দেখার চেষ্টা করি ।

>>> one_liner_add = lambda a, b : a+b

>>> print one_liner_add(4,5)
9

>>> print one_liner_add(50,10)
60

এখানে উলেক্ষ্য যে একপ্রেশনে কোন ইনপুট ভেরিয়েবল বা রিটার্ন ভ্যালু এক্সপ্লিসিটলি উল্লেখ করা লাগেনা। সরাসরি ল্যাম্বডা এক্সপ্রেশন বা এসাইন্ড(assigned) ফাংশন অবজেক্ট ভেরিয়েবল কে যথাযথ প্যারামিটার দিয়ে কল করলেই চলে । আরেকটি উদাহরণ দেখা যাক ঃ

>>> my_list = ['Joy', 'Bangldesh', 'dhaka', 'bandarban', 'abahoni', 'Notredame College', 'DU' ]
>>> my_list.sort()
>>> print my_list
['Bangldesh', 'DU', 'Joy', 'Notredame College', 'abahoni', 'bandarban', 'dhaka']

আমরা যদি সর্ট ফাংশন ব্যাবহার করি, তাহলে তা কেস সেন্সিটিভিটিতে গোলমেলে রেজাল্ট দিচ্ছে।  সেক্ষেত্রে আমরা key প্যারামিটার ডিফাইন করে ব্যাপারটা ঠিক করতে পারি। পুরোদস্তর একটা ফাংশন না লিখে, ল্যাম্বডা এক্সপ্রেশন  দিয়েই কাজটা সহজেই করা যায় ।

>>> my_list.sort(key =  lambda x: x.lower())
>>> print my_list
['abahoni', 'bandarban', 'Bangldesh', 'dhaka', 'DU', 'Joy', 'Notredame College']